Есть таблица
users:
- id - name
Таблица
drivecat_user:
- drivecat_id - user_id
Таблица
rating:
- id - user_id - total // помимо total есть еще много других значений, но total - их сумма и по ней идет сортировка
Вот краткий код выборки без лишнего:
$users = User::where('city_id', $city_id);
if ( $request->drivecats ) {
$drivecats = explode(',', $request->drivecats);
$users_id = DrivecatUser::whereIn('drivecat_id', $drivecats)->pluck('user_id');
$users = $users->whereIn('id', $users_id);
} else {
$users = $users->has('drivecats')->with('drivecats');
}
Вот код сортировки:
$users = $users
->with('rating')
->join('rating', 'users.id', '=', 'rating.user_id')
->orderBy('rating.total', 'desc')
->paginate(12);
До того, как я подключил сортировку, с выборкой никаких проблем не было.
Как только я подключил ее, то в первом случае выборки (с
$request->drivecats
) вылезает вот такая ошибка:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select count(*) as aggregate from `users` inner join `rating` on `users`.`id` = `rating`.`user_id` where `city_id` = 4 and `id` in (2, 8, 14, 16))
Если убрать из выборки строку
$users = $users->whereIn('id', $users_id)
, то все опять в порядке (но, естественно, результат уже не тот).
Как исправить данную ситуацию?
Проблема в сортировке или все-таки в выборке?