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

查询语句

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

关联关系

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

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

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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

加 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 (楼主) 1年前
讨论数量: 14
Mutoulee

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年前 评论
Tomo11111

: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 (楼主) 1年前

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