この記事について
よく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');
});
}
終わりに
こんなコード全く需要ないかもしれないですが、誰かのお役に立てたら幸いです。