Обновив mysql сервер до версии 5.7, иногда можно столкнутся с некоторыми проблемами, связанными с группировкой. sql_mode=only_full_group_by

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'littlebuilder.shop_product_price.price' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Обсуждение на эту тему можно почитать тут: http://stackoverflow.com/questions/34115174/error-related-to-only-full-group-by-when-executing-a-query-in-mysql

Решить эту проблему можно несколькими способами:

  • Конечно же, поправив конфиг mysql сервера, но эта статья не об этом
  • Переписать sql запросы, и снова статья не об этом
  • Динамически изменить sql_mode в проекте yii2!

Правим конфиг проекта, а именно компонента db connection

...
"db" =>
[
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=db',
    'username' => 'usr',
    'password' => 'pwd',
    'charset' => 'utf8',

    'on afterOpen' => function($event) {
        $event->sender->createCommand("SET sql_mode = ''")->execute();
    }
]
...

Вот и вся магия: $event->sender->createCommand("SET sql_mode = ''")->execute();

Все комментарии (0)
Нет комментариев