Если вы помните мою статью ((https://laravel.ru/posts/357 Как отключить строгий режим MySQL в Laravel Forge (Ubuntu) )), то вы наверняка вспомните, что в MySQL 5.7 был представлен новый режим, который мы обычно называем "строгим". На самом деле он является сочетанием новых режимов, которые в сумме делают обработку ваших MySQL запросов чуть точнее, чем раньше. В предыдущей статье я рассказал, как отключить его на Ubuntu, но после этого ((https://github.com/laravel/framework/pull/12030 Адам Ватан добавил в Laravel функцию)), которая позволяет определить, используете ли вы "строгий режим", а также позволяет настроить, какие именно режимы вы бы хотели включить - всё прямо в коде. Если есть возможность задать параметр конфигурации в коде, а не на сервере, и это не повлияет на производительность, то я всегда предпочту такой вариант. Ведь в этом случае мне надо будет делать на одну вещь меньше каждый раз, когда я разворачиваю приложение на новом сервере. Поэтому я очень доволен этой функцией. .(alert) Стоит отметить, что вы можете использовать эту функцию не только для того, чтобы отключить строгий режим в версии 5.7. Можно также включить его в версии 5.6. Было бы разумно включить этот режим на всех приложениях, работающих на версии 5.6, чтобы вы могли подготовиться к версии 5.7 и проверить, не сломается ли что-нибудь при включении различных строгих режимов. == MySQL 5.7 и "строгий" режим == Прежде чем поговорить об этой функции, давайте вкратце выясним, что означает "строгий режим". В MySQL есть "режимы", каждый из которых включает или отключает определённое поведение. Например, режим %%(t)ERROR_FOR_DIVISION_BY_ZERO%%, как вы уже догадались, выдаёт ошибку при делении на ноль в SQL-операции деления. Без включения этого режима, вы просто получите результат %%(t)NULL%% без уведомления. "Строгий режим" на самом деле является набором включённых по умолчанию режимов версии 5.7, в который входят следующие режимы: %%(t) ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION %% Вы можете ознакомиться с этими режимами в ((http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_allow_invalid_dates документации MySQL)). До версии 5.7 единственным включённым режимом был %%(t)NO_ENGINE_SUBSTITUTION%%. == Включение и выключение строгого режима в Laravel 5.2 == Благодаря этой новой функции в Laravel теперь есть возможность сделать три вещи: отключить "строгий режим", вернувшись тем самым к поведению версии 5.6 и ниже; включить "строгий режим", установив тем самым поведение версии 5.7; или же самостоятельно настроить все режимы. Эти настройки находятся в %%(t)config/database.php%% в разделе %%(t)connections.mysql%%. Для начала давайте посмотрим на включение и отключение "строгого" режима: %% 'connections' => [ 'mysql' => [ // Behave like MySQL 5.6 'strict' => false, // Behave like MySQL 5.7 'strict' => true, ] ] %% == Настройка режимов == Но что, если вам не нужны дефолтные режимы версии 5.6 и 5.7? Просто настройте их самостоятельно. %% 'connections' => [ 'mysql' => [ // Проигнорировать этот ключ и положиться на строгий ключ 'modes' => null, // Явно отключить все режимы, переопределив строгую настройку 'modes' => [], // Явно включить определённые режимы, переопределив строгую настройку 'modes' => [ 'STRICT_TRANS_TABLES', 'ONLY_FULL_GROUP_BY', ], ] ] %% == Вот и всё, друзья == Теперь у вас есть возможность взять полный контроль над тем, какие режимы включить на сервере MySQL для вашего приложения, через код, не трогая настройки сервера. Проще простого. Я рекомендовал бы оставить их всех включёнными по умолчанию. Но бывают случаи при конкретных вариантах использования или со старыми проектами, когда вам нужно настроить этот список, и теперь это возможно и стало ещё проще.