Я пытаюсь развернуть поиск, чтобы вернуть страницы из 18 предметов. Раньше у меня был этот рабочий код кода:
$productsQuery = Product::where('approved', '=', 1)->leftJoin('reviews', 'reviews.products_id', '=', 'products.id')->select('products.*', DB::raw('AVG(ratings) as ratings_average' ))->groupBy('id')->orderBy('ratings_average', 'DESC');
Я добавляю к этому ссылку, как показано в документах
$productsQuery = Product::where('approved', '=', 1)->leftJoin('reviews', 'reviews.products_id', '=', 'products.id')->select('products.*', DB::raw('AVG(ratings) as ratings_average' ))->groupBy('id')->orderBy('ratings_average', 'DESC')->paginate(18);
И получить ошибку
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in group statement is ambiguous
Любые идеи о том, как развернуть формулировку?
Ошибка здесь довольно понятна:
Column 'id' in group statement is ambiguous
поэтому вам нужно сделать
'groupBy('id')'
более явным образом, указав, какой id
(из какой таблицы, как каждая таблица используется в столбце id
запроса), вы хотите использовать для группировки.
groupBy()
. В любом случае это может быть проблемой, но вам нужно это проверить. Custom paginator задокументирован в официальных документах
Это не обязательно разбиение на страницы, вызывающее проблему, ошибка вызвана вашей группой.
Вы должны поместить имя таблицы/псевдонима перед идентификатором EG:
$productsQuery = Product::where('approved', '=', 1)->leftJoin('reviews', 'reviews.products_id', '=', 'products.id')->select('products.*', DB::raw('AVG(ratings) as ratings_average' ))->groupBy('product.id OR reviews.id')->orderBy('ratings_average', 'DESC');
См. Вышеприведенное выражение, обратите внимание, что копирование, вставляемое в него, не будет работать, вы увидите изменение этого аргумента groupby.
Вы также должны посетить документы на Eloquent, вы подошли к этому так, чтобы сражаться с laravel. Я бы предложил получить более жесткое сцепление с используемым ORM.
Удачи!