Laravel 3 таблицы на отношение ToMany - PullRequest
0 голосов
/ 05 июля 2019

На основании официальной документации Laravel я обнаружил, что:

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

В этом случае представьте, что у нас есть такая структура:

books
books_authors
authors
contacts
books_authors_contacts

Это просто гипотетический случай, но яХотелось бы получить дополнительную информацию: что делать, если я хотел бы получить все контакты авторов для этой конкретной книги, представляя, что для конкретной книги несколько авторов могут иметь несколько контактов (такие контакты связаны как с авторами, так и с книгами, как утверждает сущность books_authors_contacts)

Возможно ли получить его через Laravel с энергичной загрузкой с отношением ownToMany?

Используя приведенный ниже пример, он просто извлечет все контакты автора, независимо от того, какая книга.

Заранее спасибо!

1 Ответ

1 голос
/ 05 июля 2019

Есть хитрости для получения этой функциональности очень сложным способом, см. Этот пост . В более практическом смысле, когда эти случаи поступают в профессиональную среду, вы часто заканчиваете тем, что используете метод, который объединяет эти данные. Это можно сделать несколькими способами, это подход, который я считаю довольно простым и читаемым.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...