Laravelのmigrateを途中から実行する

migrateを途中から実行

Laravelのphp artisan migrateを途中から実行するためのメモ。 なぜ途中からかというと、既存システムのDBをマイグレーションで管理できるようする際に必要になったため。

解決策

php artisan migrateを実行するとDBにmigrationsが作成される。 マイグレーションの履歴をDBで保存しているのだ。このことを生かして、migrationsテーブルに対してここまではマイグレーションを実行しましたよ、とデータを作ることで疑似的に認識させる。

作ってあげるデータは、id,migration, batchを持つデータで、idは1からインクリメント、migrationマイグレーションのファイル名(.phpは除く)、batchを1(たぶんこれは何度マイグレーションを実行したかを保っておくもので状態を1つ戻すときに使われるのでは?)に設定すればよい。

以下に例を挙げる。

id migration batch
1 2017_09_01_134421_create_prefectures_table 1
2 2017_09_01_134422_create_cities_table 1

自作したマイグレーションが正しく認識されているかを確認するためには、以下を実行する。

php artisan migrate:status

>
+------+-----------------------------------------------+
| Ran? | Migration                                     |
+------+-----------------------------------------------+
| Y    | 2017_09_01_134421_create_prefectures_table    |
| Y    | 2017_09_01_134422_create_cities_table         |
| N    | 2017_09_10_115421_create_users_table          |
+------+-----------------------------------------------+

Yになっていれば正しく認識されている。Nであれば、正しく認識されていない、もしくはまだ認識されていないので、php artisan migrateを実行するとマイグレーションが動く、ということになる。