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')
Варианты решений
- Обновить СУБД
- Использовать
$table->text()
вместо$table->json()
- Вручную обработать ситацию
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