Laravel 5中的反向多态关系

Posted

技术标签:

【中文标题】Laravel 5中的反向多态关系【英文标题】:Reverse polymorphic relation in Laravel 5 【发布时间】:2017-02-25 04:39:00 【问题描述】:

假设我们有以下模型:WarriorAxeSword

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

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

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

换句话说,是否可以将单独的模型视为使用 Eloquent 的相似类型

附言

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

【问题讨论】:

嗨,你有没有得到这个?我自己也有类似的情况 【参考方案1】:

是的,您可以将weapon 设为polymorphic relation。将列 weapon_typeweapon_id 添加到您的表中,这可以在具有 morphs 类型的迁移文件中完成:

Schema::table('warriors', function ($table) 
    $table->morphs('weapon');
);

现在您已准备好将您的关系添加到 Warrior 模型:

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

就是这样!现在你可以添加武器了,Eloquent 会处理剩下的事情。该关系甚至支持急切加载。我建议你所有的武器都应该实现一个接口,这样你就知道它们有哪些共同的方法,但不幸的是,Eloquent 无法通过 php 类型系统为你强制执行该接口。

【讨论】:

以上是关于Laravel 5中的反向多态关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 多态关系

Laravel 5分离/删除多态关系

Laravel 5.8多态关系`nullableMorphs`不起作用

Laravel 5 具有多态关系的只读视图模型

按他们获得的点数排序评论,Laravel 5.2 多态关系

如何最好地链接到 Laravel 中的多态关系