假设我们有以下模型:Warrior、Axe和Sword
是否有办法使下列行为成为可能?
$warrior->weapon = $sword;
// ...或
$warrior->weapon = $axe;
// ...换句话说,是否有可能将单独的模型视为具有雄辩的的相似类型
P.S
显然,上面是一个简单的例子,说明一个问题只是为了传达它的要点。
发布于 2017-10-11 10:02:19
是的,你可以把weapon变成多态关系。将列weapon_type和weapon_id添加到表中,这可以在具有morphs类型的迁移文件中完成:
Schema::table('warriors', function ($table) {
$table->morphs('weapon');
});现在,您可以将您的关系添加到Warrior模型中:
public function weapon() {
return $this->morphTo();
}就这样!现在你可以添加武器,雄辩将处理其余的。这种关系甚至支持急切的加载。我建议您的所有武器都应该实现一个接口,这样您就可以知道它们有哪些共同的方法,但不幸的是,无法通过PHP类型系统雄辩地为您执行该接口。
https://stackoverflow.com/questions/40065320
复制相似问题