Laravel 预加载和 Join 查询选择哪个更好?
我一直有一个疑惑,就是在数据查询时,常用join表关联查询,但是发现Laravel的预加载也挺好用的。一直想知道它们的区别和适用场景是否有各自的优势呢?或者数据量对其查询速度是否有影响?其数据在显示方面有没有什么区别?想来请教一下。(个人对源码了解不是很深入)
下面是一个实例场景:
查询论坛帖子(post)列表 关联 模块(module)和用户(user) 2个表
Join写法
DB::table('post')
->join('module', function ($join) {
$join->on('post.module_id', '=', 'module.id');
})
->join('user', function ($join) {
$join->on('post.user_id', '=', 'user.id');
})
->select([
'post.id',
'post.user_id',
'post.module_id',
'module.name',
'user.username'
])
->get();
Laravel预加载写法
DB::table('post')
->select([
'post.id',
'post.user_id',
'post.module_id',
'module.name',
'user.username'
])
->with(['module','user'])
->get();
with 是先查了A表,原来B表的外健ID IN A表ID,分拆多条SQL来执行。
如果二个表都比较大,那么with有优势。
如果都是小表,都是一样的。