Группировка с помощью Eloquent (Laravel) - PullRequest
3 голосов
/ 24 июня 2019

введите описание изображения здесь Проблема возникает, когда я добавляю группу в свой запрос ...

Form::select('*')->groupBy('serial_num')->orderBy('id')->Paginate(10);

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1055 'database.form.id' отсутствует в GROUP BY (SQL: выбрать * из form группы serial_num предел 10 смещение 0)

Ответы [ 3 ]

2 голосов
/ 24 июня 2019

Это не относится к Laravel.Вы выбираете неагрегированные столбцы (*) в сочетании с группировкой.

У вас есть два варианта

  1. использовать агрегирование (Min, Max, Avg, Group_concat) для каждого столбцаВы выбираете, а не группируете по
  2. отключить ONLY_FULL_GROUP_BY на сервере MySQL

Более подробное объяснение https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

Редактировать: Очевидно, Laravel может установить режимы MySQL наа также летать.

Как уже упоминалось в комментариях, вы можете отключить строгий режим в настройках базы данных Laravel, затем Laravel должен соответственно установить режим сервера MySQL, я не нахожу актуальную документацию дляЭто

https://github.com/laravel/laravel/blob/master/config/database.php#L59

https://mattstauffer.com/blog/strict-mode-and-other-mysql-customizations-in-laravel-5-2/

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

1 голос
/ 24 июня 2019

Перейдите в config \ database.php

Установить

'mysql' => [
    'strict' => false

после того, как вы сохранили, выполните эту команду

php artisan optimize
0 голосов
/ 24 июня 2019

Если бы вы могли обрабатывать нумерацию страниц самостоятельно, вы могли бы получить результаты, а затем добавить groupBy в коллекцию.

$forms = Form::orderBy('id')->get()->groupBy(function ($item, $key) {
    return $item['serial_num'];
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...