laravel 嵌套渴求式加载指定字段

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

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

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

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

方法二:

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

方法三:

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

这里推荐使用方法二,因为简洁嘛,我始终觉得laravel 用匿名函数执行sql语句太过繁琐,不够优雅。
使用方法二后用debug看了一下,也只执行两次sql 完美!

posted @ 2021-11-30 10:43  侯赢  阅读(108)  评论(0)    收藏  举报