web-dev-qa-db-ja.com

Laravel Eloquent:ネストされた複数の関係の積極的な読み込み

laravelのコメント:

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

私が必要なのはこのようなものです

$books = App\Book::with('author[contacts,publishers]')->get();

リレーションシップ内の複数のリレーションシップを積極的にロードします。

これは可能ですか?

34
DrivingInsanee

できるよ

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

eager loading に関するLaravelのドキュメントでは、次のように配列内の関係をリストすることを推奨しています。

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

必要な数の関係を持つことができます。次のような関係に含める列を指定することもできます。

//only id, name and email will be returned for author
//id must always be included
$books = App\Book::with(['author: id, name, email', 'author.contacts', 'author.publishers'])->get();

次のように制約を追加することもできます。

$books = App\Book::with(['author: id, name, email' => function ($query) {
                                          $query->where('title', 'like', '%first%');
                                     }, 'email', 'author.contacts', 'author.publishers'])->get();
4
Elisha Senoo