はじめに

Laravel のマイグレーションでは JSON 型カラムを簡単に定義できます。柔軟なデータ構造を保存したい場合に便利です。

マイグレーションでの定義

Schema::create('settings', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->json('options');           // JSON型
    $table->json('metadata')->nullable(); // NULL許可
    $table->timestamps();
});

モデルでのキャスト設定

モデルで$castsを設定すると、自動的に配列として扱えます。

class Setting extends Model
{
    protected $fillable = ['name', 'options', 'metadata'];

    protected $casts = [
        'options' => 'array',
        'metadata' => 'array',
    ];
}

使用例

// 保存(配列をそのまま渡せる)
Setting::create([
    'name' => 'site',
    'options' => [
        'theme' => 'dark',
        'lang' => 'ja',
        'features' => ['search', 'notification']
    ]
]);

// 取得(自動的に配列になる)
$setting = Setting::find(1);
echo $setting->options['theme']; // 'dark'

注意点

  • MySQL 5.7以上、PostgreSQL、SQLite 3.38以上で対応
  • JSONカラムへのインデックスは制限あり
  • 頻繁に検索する項目は通常カラムに分けることを推奨

カスタマイズに関するお問い合わせはこちら