Laravel 3表关于belongsToMany关系

时间:2019-07-04 21:41:15

标签: laravel eloquent

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

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

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

books
books_authors
authors
contacts
books_authors_contacts

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

是否可以通过Laravel并通过一个belongsToMany关系来快速加载它?

通过以下示例,无论书籍是什么,它都将仅检索作者的所有联系人。

提前谢谢!

1 个答案:

答案 0 :(得分: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();