[英]Reverse polymorphic relation in Laravel 5
假设我们有以下模型: Warrior
, Axe
和Sword
有没有办法使以下行为成为可能?
$warrior->weapon = $sword;
// ...
要么
$warrior->weapon = $axe;
// ...
换句话说, 是否可以将单独的模型视为与Eloquent具有相似类型 ?
PS
显然,以上是一个仅用于传达其要旨的问题的简化示例。
是的,您可以使weapon
成为多态关系 。 在表中添加weapon_type
和weapon_id
列,可以在具有morphs
类型的迁移文件中完成:
Schema::table('warriors', function ($table) {
$table->morphs('weapon');
});
现在您可以将您的关系添加到Warrior
模型中:
public function weapon() {
return $this->morphTo();
}
而已! 现在,您可以添加武器,而Eloquent将负责其余的工作。 该关系甚至支持预加载。 我建议您所有的武器都应实现一个接口,以便您了解它们共有的方法,但是不幸的是,Eloquent无法通过PHP类型系统为您实施该接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.