Laravel 5的反向多态关系

Laravel 5的反向多态关系,laravel,laravel-5,eloquent,relationship,Laravel,Laravel 5,Eloquent,Relationship,假设我们有以下模型:一个战士、一把斧头和一把剑 有没有办法使以下行为成为可能 $warrior->weapon = $sword; // ... 或 换句话说,是否可以将不同的模型视为具有类似类型的雄辩的 附言 显然,上面是一个简化的问题示例,仅用于传达问题的要点。是的,您可以将武器a。将列武器类型和武器id添加到表中,这可以在迁移文件中使用变形类型完成: Schema::table('warriors', function ($table) { $table->morph

假设我们有以下模型:一个
战士
、一把
斧头
和一把

有没有办法使以下行为成为可能

$warrior->weapon = $sword;
// ...

换句话说,是否可以将不同的模型视为具有类似类型的雄辩的

附言


显然,上面是一个简化的问题示例,仅用于传达问题的要点。

是的,您可以将
武器
a。将列
武器类型
武器id
添加到表中,这可以在迁移文件中使用
变形
类型完成:

Schema::table('warriors', function ($table) {
    $table->morphs('weapon');
});
现在,您可以将您的关系添加到
Warrior
模型:

public function weapon() {
    return $this->morphTo();
}

就这样!现在你可以添加武器了,剩下的就交给雄辩手了。该关系甚至支持即时加载。我建议您的所有武器都应该实现一个接口,这样您就可以知道它们有哪些共同的方法,但不幸的是,Eloquent无法通过PHP类型系统为您强制实现该接口。

Hi,您有什么收获吗?我自己也有类似的情况
public function weapon() {
    return $this->morphTo();
}