我试图计算table
和join
中的一些项目与另一个table
,所以我使用以下代码
Article::join("article_comments", "article_comments.article_id", "=","articles.id")->
select(["articles.title", "articles.content", "articles.created_at", DB::raw('count(article_comments.id) as commentsCount')])->paginate(10) ;
但我总是只得到第一项
答案 0 :(得分:0)
如果您使用聚合,是否应该有一个组?
类似的东西:
Article::join("article_comments", "article_comments.article_id", "=","articles.id")->
select(["articles.title", "articles.content", "articles.created_at", DB::raw('count(article_comments.id) as commentsCount')])->
groupBy('articles.id')->
paginate(10);
此外,由于您没有使用联接表进行过滤,因此您可能需要考虑急切加载。但是在您的情况下,您只会收到包含评论的文章。使用预先加载时,您将获得所有文章(包括没有评论的文章)。
这样的事情应该有效:
Article::with([
'comments' => function ($query) {
$query
->select('article_id', DB::raw('COUNT(`id`) AS `commentCount`'))
->groupBy('article_id')
}
])
->paginate(10);
现在您应该可以像这样访问计数:
echo $article->comments->first()->commentCount;
没有测试解决方案。您可能想检查$ article-> comments-> first()是否存在。
或者如果你想扩展你的模型,那么here会有一些更好的想法