with一对多关联查询限制查询条数
订单表 备注表
他们是一对多的关系,
我想每页读取10个订单,然后获取10个最新的备注
with无法使用limit来控制输出的条数,我想问下就是有没有啥更好的办法来
->with([
'remarks' => function ($query) {
$query->orderByDesc('time')->select(['order_id', 'user_name', 'content', 'time']);
}
])
->paginate(10);
$items = $page->items();
$data = [];
foreach ($items as $value) {
$remarks = $value->remarks->take(10)->toArray();
unset($value['remarks']);
$value['remarks'] = $remarks;
$data[] = $value;
}
为啥不可以 真奇怪
with 无法使用 limit 来控制输出的条数
with可以使用limit来控制的。为什么说不可以呢?还有订单备注还能有多条的场景吗。
在model的关联关系那里直接写limit
原理楼上已经说的差不多了
此处增加limit将会导致数据缺失
那就自己写吧,先查出来再循环每一条查询就是的。你这个是分页的,循环里写sql应该也没事吧
不用模型,用DB吧
用DB可以实现,默认的情况下模型方式是不支持的。
先把 10 个订单对应的备注表数据 group by 一下最大的 id 出来,再 in 一下就可以了
主表裡面可以加一個最新備註id
获取主表数据id,然后手动拼接了个union查询,我以前是这么实现的 :joy:
whereIn (备注的sql语句)