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

查询语句

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

关联关系

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

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

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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

加 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查询,看具体情况,没有性能问题的情况下笨方法也不是不行。

2年前 评论
auithira (楼主) 2年前
讨论数量: 14
Mutoulee

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

2年前 评论

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

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

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

2年前 评论
auithira (楼主) 2年前
小猪蹄子 (作者) 2年前
aab

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

2年前 评论
Tomo11111

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

2年前 评论
auithira (楼主) 2年前

加 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查询,看具体情况,没有性能问题的情况下笨方法也不是不行。

2年前 评论
auithira (楼主) 2年前

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