CakePHP3 migration コマンド


CakePHP 3 の migration コマンド について調べました。

環境

  • PHP 5.5.9
  • cakephp/cakephp 3.0.9
  • cakephp/migrations 1.1.4

bake で使えるタスク

migration

次のように コマンドを実行すると migrate するための コード が生成されます。

コマンドの実態は SimpleMigrationTask.php を継承した MigrationTask.php で定義されています。 オプションの設定部分とあらかじめ定められたフォーマットを見てみます。

オプションは 親クラスの SimpleBakeTask で定義されているものと同じです。 また、 --plugin-p は同じオプションになります。

次にあらかじめ定められた migrate のパターンを見てみましょう。

ここから、 CreateTableDropTableAddColumnToTableRemoveColumnFromTableAlterTable の形が最初から使えるというのがわかりますね。 決められたフォーマットでなければ、 空のマイグレーションファイルができるので、そこに自分で必要な処理を追加します。

migration_snapshot

php bin/cake.php bake migration_snapshot snapshot_name とやると テーブル構造のスナップショットが migration コード として作成されます。

オプションに require-table というのが使用でき、 これを使用すると Table クラス の存在するテーブルのみ スナップショット の対象になります。 標準では、データベースにあるテーブルがスナップショットの対象になります。

実際にやってみるとわかりますが、 Template/Bake/config/snapshot.php を見るだけでもだいたい予想がつきます。

migrations で使えるコマンド

php bin/cake.php migrations COMMAND で使用できるコマンドを見ていきます。 基本的に、 Commandディレクトリの中にあるファイルを見ればいいです。

migrate

マイグレートを実行します。 target オプション を使用して バージョンを指定すると、 指定されたバージョンのみマイグレートを行います。

rollback

最後に行われたマイグレートを元に戻します。 target オプション を使用して バージョンを指定すると、 指定されたバージョンまでロールバックします。

status

マイグレーション一覧を、実行されたかされていないかを含めて出力します。

mark_migrated

マイグレーションを実行されたことにします。 php bin/cake.php migrations mark_migrated VERSION とコマンドを実行します。 VERSION のところは 対象マイグレーションファイルのバージョンにします。

CakePHP 3 の migration は phinx を継承しているので、 phinx のコードまで見ないとわからないことがあり、すべてを把握するのは大変です。