Laravel Eloquent GroupBy выдает ошибку SQL - PullRequest
0 голосов
/ 05 мая 2019

Когда я запускаю приведенный ниже SQL вручную, я получаю ожидаемые результаты без ошибок

select * from `crawl_results` 
    where `user_id` = 1 and `website_id` = 1 
    and `item_state` != 'OK' group by `destination_url` 
    limit 30 offset 0

Однако, когда я запускаю это в Eloquent ...

self::where('user_id', Auth::id())
    ->where('website_id', $scanID)
    ->where('item_state', '!=' , 'OK')
    ->groupby('destination_url')->paginate(30)

Выдает эту ошибку:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1055 'link_checker.crawl_results.id' отсутствует в GROUP BY (SQL: выберите * из crawl_results, где user_id = 1и website_id = 1 и item_state! = ОК сгруппировать по destination_url предел 30 смещение 0)

Не уверены, что происходит за абстракцией для создания этой ошибки?

Ответы [ 2 ]

1 голос
/ 05 мая 2019

Измените ваш запрос на запрос построителя запросов

DB::table('crawl_results')->where('user_id', Auth::id())->where('website_id', $scanID)->where('item_state', '!=' , 'OK')->groupby('destination_url')->paginate(30);

Должно работать нормально.

В документации упоминается, что GROUP BY не может быть эффективно выполнена при разбиении на страницы

В настоящее время операции разбиения на страницы, использующие оператор groupBy, не могут быть эффективно исполнен Laravel. Если вам нужно использовать groupBy с разбитый на страницы набор результатов, рекомендуется запрашивать базу данных и создайте paginator вручную.

1 голос
/ 05 мая 2019

Вы должны перейти в config \ database.php и изменить строгий на false

'mysql' => [
   ...
   'strict' => false,
   ...
 ]
...