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

Если в моделе не указать

protected $dates = ['something_at'];

То надо делать формат

// Поле типа date 
'something_at' => Carbon::now()->addDays(7)->format('Y-m-d'),

// Поле типа date 
'something_at' => Carbon::now()->addDays(7)->format('Y-m-d H:i:s'),

Laravel Where Exists Clauses

Метод whereExists позволяет написать SQL-условия where exists. Метод whereExists принимает в качестве аргумента замыкание, которое получит экземпляр конструктора запросов, позволяя вам определить запрос для помещения в условие "exists":

09 октября 2018 г. в Laravel