- 在普通的关联查询下,我们循环数据列表会执行 n+1 次 SQL查询
$list = UserModel::select([19,20,21]);
foreach($list as $user){
dump($user-profile);
}
- 关联预载入的方式,将会减少到两次,也就是起步一次,循环一次
$list=UserModel::with(['profile'])->select([19,20,21]);
foreach($list as $user){
dump($user->profile);
}
- 关联多个附表,都想要进入预载入,可传入多个模型方法
$list = UserModel::with(['profile,book'])->select([19,20,21]);
foreach($list as $user){
dump($user->profile);
dump($user->book);
}
- 关联模型实现链式操作,可以使用闭包查询
$user = UserModel::field('id,usernmae')->with(['profile'=>function($query){
$query->field('user_id,hobby');
}])
- 关联预载入还提供了一个延迟预载入,就是先执行 select() 再 load() 载入
$list = UserModel::select([19,20,21]);
$list->load(['profile']);
foreach($list as $user){
dump($user)
}
|