pre*_*eyz 18 orm relationship laravel eloquent laravel-4
在Laravel中定义多对多关系时,使用belongsToMany()或hasManyThrough()有什么区别?
例:
User
Account
Account_User
因此,User通过Account_User表与Account有很多关系.除了仅定义具有相关帐户的相关用户的数据透视表之外,它还存储一个Account_User.role字段,该字段确定给定用户在给定帐户中具有哪个角色.
使用其中一个User belongsToMany() Account或User hasManyThrough() Account Account_User哪个含义会是什么?或者这基本上是一样的吗?
当决定一个方法时,我想我应该使用相同的方法进行反向关系定义.
Ard*_*rda 18
比方说,你有两种模式,我们姑且称之为A及B:
如果A可能有多个项目B,也B可能有多个项目A
(想像博客文章/标签)你必须使用belongsToMany();
现在让我们假设您有3个型号A,B和C.
A与...有关B,与... B有关C.但你需要访问C与A(over B)相关的所有内容,然后你需要使用hasManyThrough()
(想想countries- > users- > posts,你需要post特定的所有s country)
hasManyThrough() 并不是完全意味着多对多的关系,它更像是一种捷径.
检查文档链接,1,2(4.2 Laravel),或3,4(Laravel 5.x的).
Mak*_*nov 11
虽然@Arda 的答案是绝对正确的,但我发现自己需要一些时间来消化它。因此,我尝试用更简单的术语来表达同样的事情。
hasManyThrough当您遇到类似于以下场景的情况时非常有用:
Company一对多Office,Office一对多Employee。如果您想获取为给定公司工作的所有员工,您需要:// Company Model
public function employees()
{
return $this->hasManyThrough('App\Employee', 'App\Office');
}
Run Code Online (Sandbox Code Playgroud)
belongsToMany另一方面,当您与中间的数据透视表存在多对多关系时,则很有用。例如:
Film多对多Category。如果您想获取给定电影的所有类别,您需要:// Film Model
public function categories()
{
return $this->belongsToMany('App\Category', 'pivot_table_name');
}
Run Code Online (Sandbox Code Playgroud)
考虑到所讨论的场景,belongsToMany连接多对多所需的关系Users是Accounts。hasManyThrough不能应用。
| 归档时间: |
|
| 查看次数: |
4270 次 |
| 最近记录: |