2025年12月21日日曜日

Laravelのシーダー実行時に created_at, updated_at も更新する方法

検索でヒットするのは、
・普通にinsert文にcreated_at, updated_atを追加しましょう。
・factoryを使えば自動で付与されます。
と言ったところ。

テストデータであれば後者で良いだろうが、マスターデータの場合は前者を使うことになるがデータの一つ一つにcreated_at, updated_atを付けていくのは無駄を感じる。

よって、以下のように最後にcreated_at, updated_atだけ更新するのが簡単&効率的でコード上も無駄がない。
database/seeders/XxxSeeder.php
DB::table('xxxs')->insert([
    ["type"=>1, "name"=>"項目1"],
    ["type"=>2, "name"=>"項目2"],    ...
]);
$now = now();
DB::table('xxxs')->update(["created_at"=>$now, "updated_at"=>$now]);

※「created_at, updated_atには必ず値を入れておきたい」と言うことになってくるかと思うので、テーブル作成時(マイグレーション時)にDB側で Not Null & デフォルト値 設定をしても良い。
 しかし残念ながら
database/migrations/20xx_xx_xx_xxxxxx_create_xxxs_table.php
$table->timestamps();;
は、デフォルト値設定ができないため、timestamps()を消してtimestamp型で自力で作らなければならない。



0 件のコメント:

コメントを投稿