Laravel Eloquent: eager loading of multiple nested relationships

You can do

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

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

So, now you can try

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