繁体   English   中英

按平均文章评分排序文章

[英]Order articles by average article rating

我希望能够根据我使用以下查询解决的评分来订购我的文章:

return Article::where('private', 0)
    ->whereIn('movie_id', $movie)
    ->with(['user', 'movie', 'ratings'])
    ->withCount(['ratings as average' => function ($query) {
        $query->select(\DB::raw('coalesce(avg(value), 0)'));
    }])
    ->orderByDesc('average')
    ->paginate(10);

然而,问题是如果一篇文章只有 1 或 2 个评分/投票并且它们都是正面评分,那么该文章将与其他具有更多评分/投票的顶级文章一起排名,这会给出不准确的结果。 我如何将其限制为仅获得超过 5 票的文章? 还有其他更好的解决方案吗?

如果ratings是一个关系 hasMany,您可以简单地使用:

return Article::where('private', 0)
         ->has('ratings', '>=', 5)
         ...

仅获取评分为 5 或更多的文章。

您也可以在查询中获取所有文章,包括评分数:

return Article::where('private', 0)
         ->withCount('ratings')
         ...

您可以在循环中使用一个简单的条件来仅显示具有 5 个或更多评分的文章的评分:

@foreach ($articles as $article)
     @if ($article->count_ratings >= 5)
          // show rating 
     @endif
@endforeach

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM