Сортировка по полю другой таблицы Laravel
Здраствуйте. У меня есть задача отсортировать пользователей по их рейтингу. Рейтинг находится в другой таблице user_info. Делаю через подзапрос, вывод на страницу осуществляю по 10 записей с помощью метода paginate. Но если рейтинг повторяется - например у меня есть 30 пользователей с рейтингом 100, то на первой и второй странице пагинации нахожу дублирующихся пользователей. То есть один и тот же пользователь есть и на первой и на второй странице. Как этого избежать? Окружение: Laravel 8.4, PosgreSQL 12, PHP 7.4
$this->builder->orderBy(UserInfo::select('rating')
->whereColumn('user_info.user_id', 'users.id')
->orderBy('rating', $direction)
->take(1),
$direction
);
Ответы (1 шт):
Автор решения: no4ch
→ Ссылка
Берешь пользователей, джоинишь к ним рейтинг и делаешь сортировку по рейтингу. С пагинацией работает без проблем
User::query()
->join('user_info', function ($j) {
/* @var JoinClause $j*/
$j->on('users.id', '=', 'user_info.user_id');
})
->orderBy('user_info.rating')
->paginate(15);