web-dev-qa-db-fra.com

Laravel Eloquent: chargement empressé de plusieurs relations imbriquées

Ce que dit Laravel:

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

Ce dont j'ai besoin c'est quelque chose comme ça

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

où nous désirons charger plusieurs relations au sein d’une relation. 

Est-ce possible?

31
DrivingInsanee

Tu peux faire 

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

La documentation de Laravel sur eager loading recommande de lister les relations dans un tableau comme suit:

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

Vous pouvez avoir autant de relations que vous le souhaitez. Vous pouvez également spécifier les colonnes à inclure pour une relation comme celle-ci:

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

Vous pouvez également ajouter des contraintes comme suit:

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