首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel中的许多关系: belongsToMany()与hasManyThrough()

Laravel中的许多关系: belongsToMany()与hasManyThrough()
EN

Stack Overflow用户
提问于 2014-02-11 10:20:02
回答 2查看 8.7K关注 0票数 26

在Laravel中定义多到多的关系时,使用belongsToMany()或hasManyThrough()有什么区别?

例子:User Account Account_User

因此,用户通过Account_User表拥有多到多的帐户关系。除了定义具有相关帐户的相关用户的枢轴表之外,它还存储一个Account_User.role字段,该字段确定给定用户在给定帐户中的角色。

使用User belongsToMany() AccountUser hasManyThrough() Account Account_User意味着什么?或者这基本上是一样的?

当决定一个方法时,我想我应该用同样的方法来定义反向关系。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-11 10:36:42

假设您有两个模型,让我们调用AB

如果A可能有多个B项,如果B可能有多个A项(比如博客帖子/标签),则必须使用belongsToMany()

现在假设您有3种模型,ABC

AB相关,BC相关。但是您需要访问所有与C相关的A (overB),然后您需要使用hasManyThrough() (比如countries -> users -> posts,并且需要来自特定country的所有post)。

hasManyThrough()并不完全适用于许多人的关系,它更像是一条捷径。

查看文档链接,12 (Laravel4.2),或3.4. (Laravel5.x)。

票数 32
EN

Stack Overflow用户

发布于 2019-11-12 09:24:55

虽然@Arda的回答是完全正确的,但我发现自己需要一些时间来消化它。因此,我试图用更简单的术语来表达同样的观点。

当您有类似于以下场景的内容时,hasManyThrough是有用的:

  • 一家公司有许多办公室,每个办公室都有许多雇员在其中工作。换句话说,Company一对多OfficeOffice一对多Employee.如果你想找一家公司的所有员工,你需要:
代码语言:javascript
运行
复制
// Company Model

public function employees()
{
    return $this->hasManyThrough('App\Employee', 'App\Office');
}

另一方面,belongsToMany是有用的,当你有一个多到多的关系与枢轴表之间。例如:

  • 一部电影可以有许多类别(喜剧、戏剧等)。每一个类别都可以属于许多电影。换句话说,Film多到多Category。如果您想要获取给定影片的所有类别,则需要:
代码语言:javascript
运行
复制
// Film Model

public function categories()
{
    return $this->belongsToMany('App\Category', 'pivot_table_name');
}

考虑到所讨论的场景,belongsToMany是将许多Users连接到多个Accounts所需的关系。不能应用hasManyThrough

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21699050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档