我的应用中有一个变形与多对的关系。物品可以有几个小时,其他表也可以有几个小时。
所以我有一种方法来声明Items和Hours之间的关系:
public function hours()
{
return $this->morphMany(
HoursetItemHourTable::class,
'owner_type',
'owner_type',
'owner_id'
);
}
这种方法有效,但我不明白为什么。为什么我要写'owner_type'两次作为参数?
答案 0 :(得分:3)
简短的回答是:你没有。
实际上,该方法在编写时的唯一原因是因为您已经指定了第三个和第四个参数。
第一个参数是相关的类。第二个参数是" name"关系。第三个参数是" type"要使用的字段。第四个参数是" id"要使用的领域。
只需要前两个参数。第二个参数用于构建要访问的字段名称,但仅限于第三个和第四个参数中未提供的字段名称。
基本上,你可以像这样编写你的关系,它会正常工作:
public function hours()
{
return $this->morphMany(HoursetItemHourTable::class, 'owner');
}
如果您没有指定"键入"或者" id"字段,它将采用" name"给定(第二个参数),并附加" _type"和" _id"分别。如果指定"键入"和" id"字段,"名称"根本没有使用参数。