はじめに
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カラムへのインデックスは制限あり
- 頻繁に検索する項目は通常カラムに分けることを推奨