一对多关联模型 如何查询出每条数据的关联数据

查询语句

一对多关联模型 如何获取关联表的前几条数据

关联关系

一对多关联模型 如何获取关联表的前几条数据

使用limit限制查询结果,只有第一条有关联数据,如图所示

一对多关联模型 如何查询出每条数据的关联数据

如何查询出关联数据的前几条

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

加 limit 不能实现目的,不是认为的会为每个 creator 都进行一次查询,with 是预加载,只会统一执行一次sql,相当于 hotWorks() 里边的query 再加上 whereIn(‘cid’,[1,2,3]),然后底层将这次查询出来的数组根据关联外键匹配到 creators 身上,因为 with(‘hotworks’) 只返回一条 cid=1 的数据,所以只匹配到了 id 为 1 的 creator 身上。靠预加载实现比较难,可以试着去掉 limit,然后遍历creators,对每个creator->hotworks,进行截取前N条,当然适合每个creater 的 hotworks 并不多的情况下。实在不行就不用 with,直接遍历分别sql查询,看具体情况,没有性能问题的情况下笨方法也不是不行。

1周前 评论
auithira (楼主) 5天前
讨论数量: 14

toSql() 后打印出来看看是啥

1周前 评论

模型关联《Laravel 7 中文文档》

$users = App\User::with(['posts' => function ($query) {
    $query->orderBy('created_at', 'desc');
}])->get();
1周前 评论
auithira (楼主) 1周前
fearless222 1周前
auithira (楼主) 1周前
fearless222 1周前

with关联上面加limit是没用的,你先看看表里面到底有没有关联的数据吧

1周前 评论
auithira (楼主) 1周前
小猪蹄子 (作者) 1周前
aab

感觉只要看到 top N 这样的事情,第一反应就是窗口函数

1周前 评论

:wink:再加一个 hasOne 方法是不是就满足需求啦?

1周前 评论
auithira (楼主) 1周前

加 limit 不能实现目的,不是认为的会为每个 creator 都进行一次查询,with 是预加载,只会统一执行一次sql,相当于 hotWorks() 里边的query 再加上 whereIn(‘cid’,[1,2,3]),然后底层将这次查询出来的数组根据关联外键匹配到 creators 身上,因为 with(‘hotworks’) 只返回一条 cid=1 的数据,所以只匹配到了 id 为 1 的 creator 身上。靠预加载实现比较难,可以试着去掉 limit,然后遍历creators,对每个creator->hotworks,进行截取前N条,当然适合每个creater 的 hotworks 并不多的情况下。实在不行就不用 with,直接遍历分别sql查询,看具体情况,没有性能问题的情况下笨方法也不是不行。

1周前 评论
auithira (楼主) 5天前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!