CakePHP3 のマイグレーションとロールバック


CakePHP3 のマイグレート操作とロールバック操作をまとめました。

環境

  • CakePHP 3.1.5
  • PHP 5.6.4

使えるコマンドとそのオプション

Migrate

存在するマイグレーションファイルをすべて実行します。 オプションを使うと、ある特定のマイグレーションまでを実行することができます。

使い方

オプション
target
--targetまたは-tに続けてマイグレーションファイル名の先頭にある番号を記述します。 すると、その番号のマイグレーションまで実行されます。
date (検証中)
--dateまたは-dに続けて日付を入力すると、その日付までマイグレートされます。
plugin
--pluginまたは-pに続けてプラグイン名を記述します。
connection
--connectionまたは-cに続けてデータソースコネクションを指定します。 複数のデータソースを使い分ける場合に役立つオプションです。
source
--sourceまたは-sに続けてディレクトリを記述します。 そのディレクトリ内にあるマイグレーションファイルが実効対象となります。

Rollback

最後に実行されたマイグレーションをロールバックします。 オプションを使うと、ある特定のマイグレーションまでをロールバックすることができます。

使い方

オプション
target
--targetまたは-tに続けてマイグレーションファイル名の先頭にある番号を記述します。 すると、その番号のマイグレーションまでロールバックされます。
date (検証中)
--dateまたは-dに続けて日付を入力すると、その日付までロールバックされます。
plugin
--pluginまたは-pに続けてプラグイン名を記述します。
connection
--connectionまたは-cに続けてデータソースコネクションを指定します。 複数のデータソースを使い分ける場合に役立つオプションです。
source
--sourceまたは-sに続けてディレクトリを記述します。 そのディレクトリ内にあるマイグレーションファイルがロールバック対象となります。

注意点

Rails と同じ感覚で特定のマイグレーションのみをロールバックしようとして bin/cake migrations rollback --target XXXXXXXXXXX とやると、 ひとつのマイグレーションのみではなく、 最後に実行したマイグレーションから指定したマイグレーションまでがロールバックされます。

私は次のような荒技を使うことがあります。

  1. マイグレーションファイルを書き換える
  2. データをダンプする (mysqldump -u user -p dbname -t > dump.sql) 。 テーブルはダンプしない。
  3. マイグレーションをすべてロールバックするか、データベースを削除する。
  4. マイグレーションを実行する。 ここで新しいテーブル構成に変更される。
  5. データをロードする。 (mysql -u user -p dbname < dump.sql)