请问下 with 怎么限定条数?
有两个表
文章表 Article
评论表 Comment
他们是一对多的关系,
现在我想每页读取10篇文章,每篇文章只取最新的三条评论,请问这种要怎么实现
我尝试过
Article::with(['comment'=>function($query){
$query->limit(3)
}])->limit(10)->get();
这种不行,这种的话最终得到的结果是3篇文章,请问下要怎么写才能读10篇文章,每篇文章只取三条最新的记录呢?
关于 LearnKu
高认可度评论:
@linzi @Echoiii
你上面的方法会导致 N+1 的问题,比如你取 100个 Doctor,会运行 101 条 Query。
可以试下重新设置关系:
应该可以呀

@linzi 你Doctor的limit(1)的时候是可以的 大于1的时候除了第一条limit(3)是有效,其他的都为空了
用foreach处理一下啊
@linzi @Echoiii
你上面的方法会导致 N+1 的问题,比如你取 100个 Doctor,会运行 101 条 Query。
可以试下重新设置关系:
@jltxwesley perfect
@jltxwesley 你这样可以加 限制条数 但是with 方法 里面 怎么加 count 或者groupBy啊
@jltxwesley
第一种打印出来的结果
array:5 [▼
0 => array:5 [▼
"id" => 1
"name" => "文章1"
"created_at" => "2018-11-09 13:51:25"
"updated_at" => "2018-11-09 13:51:28"
"limit_comment" => array:3 [▶]
]
1 => array:5 [▼
"id" => 2
"name" => "文章2"
"created_at" => "2018-11-09 13:51:37"
"updated_at" => "2018-11-09 13:51:49"
"limit_comment" => []
]
2 => array:5 [▼
"id" => 3
"name" => "文章3"
"created_at" => "2018-11-09 13:51:58"
"updated_at" => "2018-11-09 13:52:01"
"limit_comment" => []
]
3 => array:5 [▼
"id" => 4
"name" => "文章4"
"created_at" => "2018-11-09 13:52:09"
"updated_at" => "2018-11-09 13:52:12"
"limit_comment" => []
]
4 => array:5 [▼
"id" => 5
"name" => "文章5"
"created_at" => "2018-11-09 13:52:21"
"updated_at" => "2018-11-09 13:52:23"
"limit_comment" => []
]
]
只有第一条数据限制到了,
第二种方法我试过,他是将集合里面的数据全部查出来再对集合进行重新筛选的,如果评论数据量大的话 这样会很慢的
@Echoiii
不好意思 最近有事 没上社区。
对 第一种方法没有解决问题 第二种的话 articles 如果已经有分页了,取出三个评论去重制关系,速度应该还好,不过会用到更多的内存。你可以写个 seeder,用 factory 加载上万条的评论去测试下。
@Echoiii
忘记说了,至于第一种为什么不行,其实犯的错误和你问的是一样的,第一次回你的时候没注意:
因为 Laravel 只用一条语句 预加载关系,当我们在关系中加入 take/limit 3 的时候,会导致该语句只返回三条 comments,所以得到的结果就是第一篇 article 中有 comments,其余的都没有。laravel with 查询列表限制条数可以参考这个https://blog.csdn.net/xlmmsby/article/deta...
不能使用with去查询,with底层是in查询,in查询后边跟limit没用的