Упорядочить статьи по среднему рейтингу статьи - PullRequest
0 голосов
/ 08 октября 2019

Я хочу иметь возможность заказать свои статьи на основе их рейтинга, который я решил с помощью следующего запроса:

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 Ответ

1 голос
/ 08 октября 2019

Если 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...