在Laravel中定义一个多对多关系时,使用属性多()或hasManyPass()有什么区别?
示例:User
Account
Account\u User
因此,用户通过Account_User表与帐户有多对多的关系。除了定义具有相关帐户的相关用户的数据透视表之外,它还存储了一个Account_User.role
字段,该字段确定给定用户在给定帐户中的角色。
使用User belongtomany()帐户或
User hasManyThrough()帐户\u User
会有什么影响?或者这本质上是一样的?
当决定一种方法时,我想我应该对反向关系定义使用相同的方法。
假设你有两个模型,我们称A
和B
:
如果A
可能有一个以上的B
,并且如果B
可能有一个以上的A
(就像博客帖子/标签一样),则必须使用belongstomy()
;
现在假设您有3个模型,A
,B
和C
。
A
与B
相关,B
与C
相关。但是您需要访问与A
相关的所有C
(超过B
),然后您需要使用hasManyThrough()
(就像国家/地区一样-
hasManyThrough()
并不完全适用于多对多关系,它更像是一种快捷方式。
检查留档链接,1,2(Laravel 4.2),或3,4(Laravel 5. x)。
虽然@Arda的答案绝对正确,但我发现自己需要一些时间来消化它。所以我试图用更简单的术语来描述同样的事情。
hasManyThrough
在类似于以下场景的情况下非常有用:
公司
一对多办公室
,以及办公室
一对多员工
。如果您想让所有为某一特定公司工作的员工都参与进来,您需要:// Company Model
public function employees()
{
return $this->hasManyThrough('App\Employee', 'App\Office');
}
另一方面,当您与中间的数据透视表存在多对多关系时,belongtomany非常有用。例如:
电影
多对多类别
。如果要获取给定电影的所有类别,则需要:// Film Model
public function categories()
{
return $this->belongsToMany('App\Category', 'pivot_table_name');
}
考虑到所讨论的场景,belongtomany
是将许多用户
连接到许多帐户
所需的关系<无法应用代码>hasManyThrough。