Posted at

Laravelのマイグレーション:migrate/rollback/fresh は何をしているのか


マイグレーションとは

 データベースのバージョンコントロールのような機能です(laravelインデックスより)

 通常DBにログインし、SQL文を作成しテストデータを入れる...などをしていたのが、ファイルを作成しコマンドを打つだけでテストデータを入れたり、前の状態に戻せたり出来る便利な機能です:clap_tone1:


なぜマイグレーションをするのか

 ・仕様変更などで変わっていくテーブルを管理する目的

 ・基本的には作成するテーブルごとにマイグレーションファイルを作成

    → updown のメソッドをもち、migrate時にmigrationsテーブルと比べて実行されていないファイル(Ran?がNのもの)のみ up が実行される


マイグレーションしたけど戻したい

 ・php artisan migrate:rollback

    → 実行済みのmigrateクラスをdown()し、1つ前の状態に戻す

 ・php artisan migrate:rollback --step=(数字)

    → (数字)回操作を前の状態に戻す


マイグレーションのステータスを確認する

 php artisan migrate:status で確認できる

 Ran?がYesの場合は現在あるmigrationが実行された状態

+------+------------------------------------------------+-------+

| Ran? | Migration | Batch |
+------+------------------------------------------------+-------+
| Yes | 2014_10_12_000000_create_users_table | 1 |
| Yes | 2014_10_12_100000_create_password_resets_table | 1 |
| Yes | 2019_07_31_031050_create_folders_table | 1 |
| Yes | 2019_07_31_063450_create_tasks_table | 1 |
| Yes | 2019_08_05_120033_add_user_id_to_folders | 1 |
+------+------------------------------------------------+-------+


一度すべてのテーブルを削除してマイグレーションし直す

 php artisan migrate:fresh

 データベースの全テーブルをDrop後、migrate を実行する


 →rollbackとの違い

 migrateファイルを削除してしまった場合などエラーがでてしまうが、 migrate:fresh はならない


おわりに

 生でPHPを書いていたときはデータを入れるのも一苦労だったのが、laravelは仕様がわかるとおもしろい便利な機能・調べればたくさんの情報がでてきてたのしいです:slight_smile: