thinkphp6.0模型篇之关联预载入

本文介绍了ThinkPHP6.0框架中模型关联预载入的使用,对比了普通关联查询与预载入在性能上的优势,阐述了预载入减少SQL查询次数以提高性能的特点,并说明了预载入不支持多次调用的限制。同时,讨论了如何预载入多个关联模型,以及通过闭包实现链式操作的方法。最后,提到了延迟预载入的概念,即先执行select()再进行load()载入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在普通的关联查询下,我们循环数据列表会执行n+1次sql查询

$list = UserModel::select([19, 20, 21]); 
foreach ($list as $user) {
 dump($user->profile); 
 }

2、采用关联预载入的方式,会执行两次查询

$list=Students::with(['stumenu'])->select([1,2,3]);
foreach($list as $user){
dump($user->stumenu);
}

3、关联预载入减少了查询次数提高了性能,但是不支持多次调用
4、如果主表关联了多个附表,都要进行预载入,可以传入多个模型方法

$list=Students::field('id','username')->with(['stumenu'=>function ($query){
	$query->filed('user_id,sex');
])->dump($user->stumenu.$user->sex);
}

5、如果想要在关联模型实现链式操作,可以使用闭包,比如添加->field()

$user = Students::field('id,username')->with(['profile'=>function ($query) { 
$query->field('user_id, hobby'); 
}])->select([19,20,21]);

6、关联预载入还提供了一个延迟预载入,就是先执行select()再load()载入

$list = UserModel::select([19, 20, 21]); 
$list->load(['profile']); 
foreach ($list as $user) { 
dump($user->profile
); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值