LoginSignup
0
0

More than 1 year has passed since last update.

[Laravel migration]開発途中で削除カラム追加になった時も同じファイルで対応したい場合の方法

Last updated at Posted at 2022-05-23

この記事について

よくLaravelの開発でDBカラムの変更を行う際に、
プロジェクトが始まった時はA〜Cのカラムだけだったんだけど、
開発を進めていくうちにDのカラムも変更しないといけなくなった・・・
だから開発開始当初につくったマイグレにカラムを追加したい。
でもマイグレをもう流してしまってDBに変更が反映されているので、
php artisan migrate:rollback -> php artisan migrate
でマイグレ流し直すと既に変更のあったカラムとマイグレに齟齬があり、
マイグレーションがエラーになる。。。
なんてことが良くある人もいるかと思います。
そんな時に思いついた解決策を今回は載せてみようと思います!

コード

今回はカラムを削除した場合の例で記載させていただきました。
以下は製品テーブルの不要なカラムを削除するという例です。
カラムがあったら削除するという様な判別用のClosureを用意しておきそのClosureに削除対象カラムを指定してあげることで
開発中に削除カラムが追加になったとしてもこのファイルにそのカラムを追加して
php artisan migrate:rollback -> php artisan migrate をしてあげればマイグレのファイルを不用意に追加しなくても良くなります!

public function up()
{
    // 開発の過程で削除対象カラムが変更にった場合に同じマイグレを流し直したいため存在チェック&削除のClosureを定義しておく
    $dropColumnIfExists = function (Blueprint $table, string $column) {
        Schema::hasColumn('products', $column) && $table->dropColumn($column);
    };

    Schema::table('products', function (Blueprint $table) use ($dropColumnIfExists) {
        $dropColumnIfExists($table, 'column_2');
        $dropColumnIfExists($table, 'column_3');
        // 開発中に column_4 が入らなくなったらここに追加すればファイル追加しなくてもよくなる
        $dropColumnIfExists($table, 'column_4');
    });
}

終わりに

こんなコード全く需要ないかもしれないですが、誰かのお役に立てたら幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0