Laravel миграция с JSON полем выкидывает ошибку

Проблема связана с тем, что СУБД до определённой версии не поддерживала нативно JSON поля, а вместо них использовались обычные текстовые поля.

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'json not null')

Варианты решений

  1. Обновить СУБД
  2. Использовать $table->text() вместо $table->json()
  3. Вручную обработать ситацию
    if ((DB::connection()->getPdo()->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') && version_compare(DB::connection()->getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION), '5.7.8', 'ge')) {
    $table->json('settings');
    } else {
    $table->text('settings');
    }

Laracasts: $table->json() generates an error when running migrations

Похожие записи

Laravel migration: Specified key was too long

В Laravel 5.4 кодировкой базы данных по умолчанию стала utf8mb4. Это повлияло на приложения, использующие MySQL v5.7.7 и меньше. Во время выполненния миграций, может вывалитсья ошибка Specified key was too long.

27 августа 2017 г. в Laravel

Eloquent collection groupBy Carbon

use Carbon\Carbon;
...

$projectsGroupedByYear = $projects->groupBy(function($p) {
    return Carbon::parse($p->start_year_date)->format('Y');
});