Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel Eloquent: eager loading of multiple nested relationships

What laravel says:

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

What I need is something like this

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

where we eager load multiple relationships within a relationship.

Is this possible?

like image 564
DrivingInsanee Avatar asked Feb 18 '16 19:02

DrivingInsanee


2 Answers

You can do

 $books = App\Book::with('author.contacts','author.publishers')->get(); 
like image 155
oseintow Avatar answered Sep 21 '22 17:09

oseintow


Laravel documentation on eager loading recommends listing the relationships in an array as follows:

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

You can have as many relationships as desired. You can also specify which columns should be included for a relationship like this:

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

You may also add constrains as follows:

$books = App\Book::with(['author: id, name, email', 'author.contacts' => function ($query) {                                           $query->where('address', 'like', '%city%');                                      }, 'author.publishers'])->get(); 
like image 33
Elisha Senoo Avatar answered Sep 20 '22 17:09

Elisha Senoo