(Laravel) не может использовать group by с помощью order by - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь использовать порядок, не добавляя столбец порядка в groupby, он работает, только если я выполняю его непосредственно из базы данных, но из laravel я получаю ошибку базы данных

Я сделал этот красноречивый код

Comment::select('product_id')->where('shop_name', $shop)->groupby('product_id')->distinct()->orderBy('created_at')->paginate(12)

будет произведен следующий запрос

выберите отличный DISTINCT (product_id) из comments, где shop_name = группа 'shopname' по product_id заказ по created_at asc limit 12 offset 0

если я потру выше запрос в базе данных, он будет работать

но если я использую красноречивый код Laravel, он выдаст эту ошибку

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1055 areviews_areviewzappz.comments.created_at отсутствует в GROUP BY (SQL: выберите отличный DISTINCT (product_id) из comments, где shop_name = группа 'shopname' по product_id заказ по created_at asc предел 12 смещение 0)

как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Проблема в том, что вы ДОЛЖНЫ действительно включить ORDER BY в список GROUP BY, так как это лучшая практика.

Причина, по которой это работает, когда вы находитесь в режиме sql, установленном на ''. Однако Laravel по умолчанию (я думаю) имеет Strict как TRUE,

У вас есть 2 варианта:

  1. Добавить create_at в предложение GROUP BY (рекомендуется)
  2. Изменить строгий режим на false

Немного больше информации о втором варианте:

Как решить проблему несовместимости с sql_mode = only_full_group_by в laravel eloquent?

0 голосов
/ 07 января 2019

Вы можете сгруппировать его после получения результатов, а не в запросе MySQL - поэтому вы группируете коллекцию после ее получения, а не записи таблицы в самом запросе.

Comment::select('product_id')
   ->where('shop_name', $shop)
   ->distinct()
   ->orderBy('created_at')
   ->paginate(12)
   ->groupBy('product_id')

Коллекция Laravel groupBy Метод: https://laravel.com/docs/5.7/collections#method-groupby

Похожие записи: Laravel Query Buider Group, не получая все записи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...