laravel - Laravel 3 表中的 belongsToMany 关系
问题描述
根据官方 Laravel 文档,我发现:
$books = App\Book::with('author.contacts')->get();
在这种情况下,假设我们有这样的结构:
books
books_authors
authors
contacts
books_authors_contacts
这只是一个假设的案例,但我想了解更多信息:如果我想检索这本特定书籍的所有作者联系方式,假设对于特定书籍,多个作者可能有多个联系方式(这些联系方式通过作者和正如实体 books_authors_contacts 所说的书)
是否可以通过 Laravel 使用 belongsToMany 关系进行急切加载来检索它?
通过使用下面的示例,它只会检索作者的所有联系人,无论这本书是什么。
提前谢谢你!
解决方案
有一些技巧可以以非常复杂的方式获得此功能,请参阅这篇文章。在更实际的意义上,当这些案例进入专业环境时,您通常最终会使用一种聚合这些数据的方法。这可以通过多种方式完成,我觉得这是一种相当简单易读的方法。
public class Book
{
public function contacts()
{
$contacts = new Collection();
$this->authors->each(function(Author $author) use($contacts) {
$contacts->concat($author->contacts);
})
return $contacts;
}
}
对于急切加载,您必须记住包含整个结构。如需更多Laravel
方法,请联系Eloquent Mutator
.
$book = App\Book::with('authors.contacts')->find(1);
$contacts = $book->authors();
推荐阅读
- r - survcomp 包:找不到函数“hazard.ratio”
- spring-boot - 如何解决 Okta 应用程序问题?
- azure-devops - VSTS 中围绕 PAT 的控制和治理
- mysql - 如何在 mysql 中使用 SUM() 进行计数?
- uitextfield - 将观察者添加到 UITextfield。从不开火?
- r - 在 for 循环中难以维护 x[i,i]
- alexa-skills-kit - alexa - audioPlayer.Play 问题在 Echo Show Now Playing 屏幕上显示内容
- ionic-framework - Ionic 3:运行 iOS 10.x 而非 11 的设备上的 ios-file-picker 应用程序崩溃
- eclipse - 启用单击 Eclipse 中的绿色圆圈以跳转到代码
- apache-spark - Spark DataFrame 过滤给出不一致的输出