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

新人提问,请见谅.

问题是这样的:

文章表关联评论表.

我想在取文章列表的时候,想要每篇文章取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条评论,跟我预期的不太一样,望各位指点一下,该如何操作?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

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

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

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

看下这篇文章吧。

7年前 评论
Summer

@oustn 大鲲哥你好 :smile:

7年前 评论

@Summer summer哥 不敢当啊 :smiley:

7年前 评论

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