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

作成後、設計したテーブル定義を元にマイグレーションファイルを編集・修正します。

マイグレーションの実行

自動生成されたマイグレーションファイルに updown、二つのメソッドが用意されています。

テーブル定義を変更する場合は 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のマイグレーションについてのメモでした。

参考資料