你想要的可以用Polymorphic Relations来完成,但是你需要创建模型来向 Eloquent 提供关于关系的必要信息。正如你所说,假设你有Item
's than 可以有额外的信息,比如Score
或其他任何东西,让它有 aSubItem
代替。
您必须定义这些模型,如下所示:
class Item extends Eloquent
{
public function extrainfo()
{
return $this->morphTo();
}
}
class Score extends Eloquent
{
public function items()
{
return $this->morphMany('Item', 'extrainfo');
}
}
class SubItem extends Eloquent
{
public function items()
{
return $this->morphMany('Item', 'extrainfo');
}
}
然后你将有一个如下的数据库结构:
items
id - integer
name - string
extrainfo_id - integer
extrainfo_type - string
scores
id - integer
score - decimal
sub_items
id - integer
name - string
这将自动执行您需要的操作。当你这样做时:
$extrainfo = $item->extrainfo;
模型上的extrainfo
关系Item
将返回 aScore
或SubItem
实例,具体取决于拥有照片的模型类型。该类型是在数据库表上定义的。
注意:这并不过分,您可以将其视为提供的元信息,以告诉 Eloquent 如何处理您的关系。