预加载嵌套关联,可以使用「点」语法。例如,在一个 Eloquent 语句中,预加载所有书籍作者和这些作者的联系信息:


$books = AppBook::with('author.contacts')->get();

那么如何为分别为author 和 contacts 指定查询字段呢?

方法一:


AppBook::with(['author' => function ($query) {
  $query->select(['选定的字段']);
  $query->with(['contacts' => function ($query) {
     $query->select(['选定的字段']);
  }]);
}])->get()

方法二:


AppBook::with(['author:id,name', 'author.contacts:email,user_id'])->get();

方法三:


AppBook::with(['author' => function ($query) {
  $query->select(['选定的字段']);
},'author.contacts' => function ($query) {
  $query->select(['选定的字段']);
}])->get();

 

引申阅读:Laravel 6嵌套预加载时添加约束(设置查询条件)的方法