预加载指定列
并不是总需要获取关系的每一列。在这种情况下,Eloquent 允许你为关联指定想要获取的列:
1
2
3
4
|
$result = User::with('topics:user_id,body,title')
->where('name', 'Summer')
->get()
->toArray();
|
注意:在使用这个特性时,一定要在要获取的列的列表中包含 id 列。『这里的 id
列是指关联字段列 user_id
』
如果要进行约束预加载,应该这样写。
1
2
3
4
5
6
7
|
$result = User::with(['topics' => function ($query) {
$query->select('id', 'user_id', 'body', 'title')
->orderBy('updated_at', 'desc');
}])
->where('name', 'Summer')
->get()
->toArray();
|
嵌套预加载指定字段的实现方法
1
2
3
4
5
6
|
$user = User::with(['posts'=>function($query) {
$query->select('id','user_id','title')->orderBy('updated_at','desc');
$query->with(['tags'=>function($query) {
$query->select('tag');
}]);
}])->where('id',1)->get();
|
没有添加约束的方法
1
|
$user = User::with(['posts:user_id,title','posts.tags'])->where('id',1)->get();
|
参考原文
记如何在预加载中指定查询的字段