Laravelのマイグレーションについてのメモ
Laravelで構築されたシステムにて、新規テーブルの作成と既存テーブルへのカラム追加を実施したのですが、その時に調査した内容のメモです。
LaravelのMigration
新規テーブルの作成やカラム追加など、DBの更新を行うための機能。
DjangoやRailsと同じく、Laravelにも標準でマイグレーション機能が装備されており、安全にDB定義の更新ができます。
migrationファイル作成
php artisan make:migration xxxx
で、 database/migrations
配下にマイグレーションファイルが自動生成されます。
テーブルの作成なのかカラム追加/削除なのかわかるように、ファイル名はcreate_xxxx_table, add_xxx_to_yyy_tableという形で運用するのが良さそうです。
# migrationファイル作成例
# xxxxはテーブル名
$ php artisan make:migration create_xxxx_table
# 更新(カラム追加)例
# xxx→カラム名、yyy→追加先のテーブル名
$ php artisan make:migration add_xxx_to_yyy_table
作成後、設計したテーブル定義を元にマイグレーションファイルを編集・修正します。
マイグレーションの実行
自動生成されたマイグレーションファイルに up
と down
、二つのメソッドが用意されています。
テーブル定義を変更する場合は up
、ロールバックする場合は down
メソッドがLaraveで使用されます。
新規テーブルの作成・更新の適用
新規テーブルの作成・更新の適用は下記コマンドで行います。
$ php artisan migrate
ロールバック
万が一適用したマイグレーションに不備があって、ロールバックしたい場合は下記を実行します。
# 最後に適用されたマイグレーションをロールバック
$ php artisan migrate:rollback
ロールバックは最後に適用されたbatchのマイグレーションが巻き戻されます。
ちなみに最後に実行されたマイグレーションはmigrationsテーブルを覗くことで確認できます。
# migrationsテーブルの中身
mysql> SELECT * FROM migrations;
+----+---------------------------------------------------+-------+
| id | migration | batch |
+----+---------------------------------------------------+-------+
| 1 | 2016_12_19_000000_create_tables | 1 |
| 2 | 2018_07_18_102240_add_column_mogumogu | 1 |
| 3 | 2021_02_05_194658_create_hogehoge_table | 2 |
+----+---------------------------------------------------+-------+
マイグレーション後の確認
マイグレーションが実行されると migrations
テーブルが更新されるので、そのテーブルを見てマイグレーションが実行されたかどうかの確認ができます。
または、 php artisan migrate:status
というコマンドでチェックできます。
migrationファイルを作り直したい場合
database/migrations
、または database/seeds
に作成されたファイルを削除します。
マイグレーションを実行した後で削除したい場合は、一度ロールバックをしてから削除します。
Seeding
マスターデータなど、予め必要なデータをまとめて挿入したいときに使います。
seederファイル作成
php artisan make:seed xxx
で、 database/seeds
配下にシーダー用のクラスができます。
php artisan make:seeder HogehogeTableSeeder
挿入するデータは database/seeds
配下にjsonファイルを用意し、その中に記述します。
Seedの適用
下記でseedを適用できます(しかし予めModelを用意する必要あり)
php artisan db:seed --class=HogehogeTableSeeder
Seedの削除
適用したseedを無かったことにしたい場合は下記コマンドを実行することでリセットできます。一度ロールバックが実行されるので、本番環境では絶対に使用してはいけません。
php artisan migrate:refresh --seed
Modelの作成
Modelがない場合は用意します。
下記コマンドで app/Models
配下にmodelファイルが作成されるので、作成後、最適な形に編集・修正します。
php artisan make:model Hogehoge
まとめ
Laravelのマイグレーションについてのメモでした。