我希望能够根据我使用以下查询解决的文章的等级来订购我的文章:
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个投票以上的文章?还有其他更好的解决方案吗?
答案 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