Laravel 5中的反向多态关系
Posted
技术标签:
【中文标题】Laravel 5中的反向多态关系【英文标题】:Reverse polymorphic relation in Laravel 5 【发布时间】:2017-02-25 04:39:00 【问题描述】:假设我们有以下模型:Warrior
、Axe
和 Sword
有没有办法使以下行为成为可能?
$warrior->weapon = $sword;
// ...
或
$warrior->weapon = $axe;
// ...
换句话说,是否可以将单独的模型视为使用 Eloquent 的相似类型?
附言
显然,上面是一个问题的简化示例,仅用于传达问题的要点。
【问题讨论】:
嗨,你有没有得到这个?我自己也有类似的情况 【参考方案1】:是的,您可以将weapon
设为polymorphic relation。将列 weapon_type
和 weapon_id
添加到您的表中,这可以在具有 morphs
类型的迁移文件中完成:
Schema::table('warriors', function ($table)
$table->morphs('weapon');
);
现在您已准备好将您的关系添加到 Warrior
模型:
public function weapon()
return $this->morphTo();
就是这样!现在你可以添加武器了,Eloquent 会处理剩下的事情。该关系甚至支持急切加载。我建议你所有的武器都应该实现一个接口,这样你就知道它们有哪些共同的方法,但不幸的是,Eloquent 无法通过 php 类型系统为你强制执行该接口。
【讨论】:
以上是关于Laravel 5中的反向多态关系的主要内容,如果未能解决你的问题,请参考以下文章