如何计算项目加入它和分页?

时间:2016-05-10 15:01:25

标签: php laravel eloquent

我试图计算tablejoin中的一些项目与另一个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) ;

但我总是只得到第一项

1 个答案:

答案 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会有一些更好的想法