按商品平均评分订购商品

时间:2019-10-08 11:57:19

标签: php laravel eloquent

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

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个投票以上的文章?还有其他更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

如果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