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 Eloquent

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

Laravel. Catch FindOrFail Exception

use Illuminate\Database\Eloquent\ModelNotFoundException;
...
try {
  $publication = Publication::findOrFail($id);
} catch (ModelNotFoundException $ex) {
  // Error handling code
}