目次
CakePHP3 のマイグレート操作とロールバック操作をまとめました。
環境
- CakePHP 3.1.5
- PHP 5.6.4
使えるコマンドとそのオプション
Migrate
存在するマイグレーションファイルをすべて実行します。 オプションを使うと、ある特定のマイグレーションまでを実行することができます。
使い方
1 |
bin/cake migrations migrate |
オプション
- target
--target
または-t
に続けてマイグレーションファイル名の先頭にある番号を記述します。 すると、その番号のマイグレーションまで実行されます。- date (検証中)
--date
または-d
に続けて日付を入力すると、その日付までマイグレートされます。- plugin
--plugin
または-p
に続けてプラグイン名を記述します。- connection
--connection
または-c
に続けてデータソースコネクションを指定します。 複数のデータソースを使い分ける場合に役立つオプションです。- source
--source
または-s
に続けてディレクトリを記述します。 そのディレクトリ内にあるマイグレーションファイルが実効対象となります。
Rollback
最後に実行されたマイグレーションをロールバックします。 オプションを使うと、ある特定のマイグレーションまでをロールバックすることができます。
使い方
1 |
bin/cake migrations rollback |
オプション
- target
--target
または-t
に続けてマイグレーションファイル名の先頭にある番号を記述します。 すると、その番号のマイグレーションまでロールバックされます。- date (検証中)
--date
または-d
に続けて日付を入力すると、その日付までロールバックされます。- plugin
--plugin
または-p
に続けてプラグイン名を記述します。- connection
--connection
または-c
に続けてデータソースコネクションを指定します。 複数のデータソースを使い分ける場合に役立つオプションです。- source
--source
または-s
に続けてディレクトリを記述します。 そのディレクトリ内にあるマイグレーションファイルがロールバック対象となります。
注意点
Rails と同じ感覚で特定のマイグレーションのみをロールバックしようとして bin/cake migrations rollback --target XXXXXXXXXXX
とやると、 ひとつのマイグレーションのみではなく、 最後に実行したマイグレーションから指定したマイグレーションまでがロールバックされます。
私は次のような荒技を使うことがあります。
- マイグレーションファイルを書き換える
- データをダンプする (
mysqldump -u user -p dbname -t > dump.sql
) 。 テーブルはダンプしない。 - マイグレーションをすべてロールバックするか、データベースを削除する。
- マイグレーションを実行する。 ここで新しいテーブル構成に変更される。
- データをロードする。 (
mysql -u user -p dbname < dump.sql
)