Как решить only_full_group_by в laravel eloquent?

Пользователь

от kenya , в категории: PHP , 2 года назад

Как решить only_full_group_by в laravel eloquent?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jamey.kohler , 2 года назад

@kenya 

Ошибка "only_full_group_by" возникает, когда в запросе используется группировка, но не все столбцы в выборке были либо проаггрегированы, либо включены в группировку. Это стандартное поведение в MySQL версии 5.7 и выше.


Для решения этой ошибки в Laravel Eloquent можно использовать функцию groupBy() для группировки результатов запроса. Однако, если в выборке используются столбцы, которые не были проаггрегированы или не включены в группировку, то в MySQL может возникнуть ошибка.


Для решения этой проблемы можно использовать один из следующих способов:

  1. Использование STRICT_TRANS_TABLES


Добавьте следующую строку в файл my.cnf, чтобы включить STRICT_TRANS_TABLES:

1
sql_mode=STRICT_TRANS_TABLES


Если вы не можете изменить этот файл, то можно выполнить запрос:

1
SET sql_mode='STRICT_TRANS_TABLES';


  1. Проаггрегировать все столбцы


Если вы хотите сохранить только_full_group_by, то можно проаггрегировать все столбцы в выборке. Например:

1
SELECT column1, SUM(column2) FROM table GROUP BY column1;


  1. Использование ANY_VALUE


Если вы используете MySQL версии 5.7 или выше, то можно использовать функцию ANY_VALUE(), чтобы проигнорировать only_full_group_by. Например:

1
SELECT column1, ANY_VALUE(column2) FROM table GROUP BY column1;


Таким образом, вы можете использовать один из перечисленных выше способов для решения проблемы only_full_group_by в Laravel Eloquent.

Пользователь

от magali , 10 месяцев назад

@kenya 

В Laravel Eloquent для решения проблемы "only_full_group_by" можно использовать следующий подход:

  1. Зайдите в файл конфигурации вашей базы данных config/database.php.
  2. Найдите в этом файле соответствующую секцию, описывающую ваше подключение к базе данных. Например, для подключения MySQL она может выглядеть примерно так:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true, // измените это значение на false
    'engine' => null,
],


  1. Измените значение 'strict' => true на 'strict' => false. Это отключит только режим "only_full_group_by" для вашего подключения к базе данных в Laravel.


Теперь Laravel Eloquent больше не будет выбрасывать ошибку "only_full_group_by" для запросов со столбцами, не включенными в группировку или проагрегированными. Обратите внимание, что отключение этого режима может иметь влияние на безопасность и интегритет данных вашей базы данных, так как оно позволяет выполнять запросы, которые не соответствуют строгим правилам группировки данных.