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 и хотят освежить в памяти основные моменты работы с ней.
18 октября 2017 г. в Laravel

Laravel. Catch FindOrFail Exception

use Illuminate\Database\Eloquent\ModelNotFoundException;
...
try {
  $publication = Publication::findOrFail($id);
} catch (ModelNotFoundException $ex) {
  // Error handling code
}
21 декабря 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'),

Eloquent collection groupBy Carbon

use Carbon\Carbon;
...

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