【问题标题】:Laravel 3 tables on belongsToMany relationLaravel 3 表中的 belongsToMany 关系
【发布时间】:2023-03-12 03:17:02
【问题描述】:

根据 Laravel 官方文档,我发现:

$books = App\Book::with('author.contacts')->get();

在这种情况下,假设我们有这样的结构:

books
books_authors
authors
contacts
books_authors_contacts

这只是一个假设的案例,但我想了解更多信息:如果我想检索这本特定书籍的所有作者联系方式,假设对于特定书籍,多个作者可能有多个联系方式(这些联系方式通过正如实体 books_authors_contacts 所说的作者和书籍)

是否有可能通过 Laravel 使用 belongsToMany 关系预先加载来检索它?

通过使用下面的示例,它只会检索作者的所有联系人,无论这本书是什么。

提前谢谢你!

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    有一些技巧可以以非常复杂的方式获得此功能,请参阅post。在更实际的意义上,当这些案例进入专业环境时,您通常最终会使用一种聚合这些数据的方法。这可以通过多种方式完成,我觉得这是一种相当简单易读的方法。

    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();
    

    【讨论】:

      猜你喜欢
      • 2015-02-22
      • 2018-05-19
      • 2018-03-08
      • 2021-03-22
      • 2021-10-17
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多