Laravel開発してて外せないのがマイグレーション
公式の説明を見ると、「破壊的」とか「データーを失う」とか、怖いこといっぱい書いてる。
新規で開発するならそうでもないけど、既存システムの改修の場合かなりビビるので、挙動をまとめておく。
migrateコマンドで実行されるファイル
マイグレーションの実行コマンドは非常に単純。
Laravelのルートディレクトリ(artisanファイルがある場所)に移動して、
php artisan migrate
これだけ。
え?追加したマイグレーションファイルだけ実行したいんだけど大丈夫?ってなる。
不安なので、まずは上記コマンドの前に以下のコマンドを実行してみる。
php artisan migrate:status
するとこんな結果が。
+------+---------------------------------------------+ | Ran? | Migration | +------+---------------------------------------------+ | Y | 2019_01_15_110240_create_test_table | | Y | 2019_01_16_110309_create_sample_table | | N | 2019_01_17_092545_add_new_column | +------+---------------------------------------------+
Ran?の列に、「Y」と「N」が表示されている。
どうやらマイグレーションが実行されているファイルかどうかを表しているようだ。
次に気になるのは、どこでこの情報を持ってるのか?というところ。
マイグレーション情報を持つテーブル
マイグレーション情報を持つテーブルは以下で設定されている。
./config/database.php : migrations => '[マイグレーション情報テーブル]', :
migrateコマンドを実行してみる
statusの結果が上記の状態で、migrateコマンドを実行してみると、Nとなっているファイルだけが実行された。
+------+---------------------------------------------+ | Ran? | Migration | +------+---------------------------------------------+ | Y | 2019_01_15_110240_create_test_table | | Y | 2019_01_16_110309_create_sample_table | | Y | 2019_01_17_092545_add_new_column | +------+---------------------------------------------+
なるほど、つまりmigrateコマンドは、実行されていないマイグレーションファイルのみ実行されるっぽい。
migrate:rollbackを実行してみる
マイグレーションにはロールバック機能もあるようで、ロールバックを実行してみる。
php artisan migrate:rollback
+------+---------------------------------------------+ | Ran? | Migration | +------+---------------------------------------------+ | Y | 2019_01_15_110240_create_test_table | | Y | 2019_01_16_110309_create_sample_table | | N | 2019_01_17_092545_add_new_column | +------+---------------------------------------------+
さいごに実行したファイルのみ、Nに戻っている。
こういう動きをするのか。
まとめ
動作が分かればマイグレーションは怖くない。