求教各位关于关联表取数据的问题

新人提问,请见谅.

问题是这样的:

文章表关联评论表.

我想在取文章列表的时候,想要每篇文章取5条评论.

我的代码这么写的

Post::with([
    'comments' => function($query){
        $query->take(5);
    }
])->paginate();

它生成的SQL语句

select * from `comments` where `comments`.`post_id` in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) limit 5

也就是在所有文章取5条评论,跟我预期的不太一样,望各位指点一下,该如何操作?

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

看起来很简单的问题,其实比较复杂。

最基本的是要理解关系查询的原理,应该是为了效率问题,关系查询就像你上面写的查询语句一样,是把所有的外键收集后再用 select in 语句来查询,最后再通过创建对应的 collection 赋值给对应的关系,而不是想当然的针对每个外键做查询。

所以你就很好理解了,为什么本来是想要每篇文章都对要5条comment,而结果只有5 条。

看下这篇文章吧。

2年前 评论
Summer

@oustn 大鲲哥你好 :smile:

2年前 评论

@Summer summer哥 不敢当啊 :smiley:

2年前 评论

@oustn 非常感谢。

2年前 评论

按照大神的文章操作 出现 Call to undefined relationship on model 跪求解答

8个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会