cakephp3のmigrations2
やったこと
- 初回作成
- テーブルに項目追加
- テーブルに項目削除、新規テーブル作成
- ロールバック
初回作成
マイグレーションファイルを作成
$ sh app/bin/cake migrations create Initial Welcome to CakePHP v3.0.0-beta2 Console --------------------------------------------------------------- App : src Path: /vagrant/projects/beta2/app/src/ --------------------------------------------------------------- using migration path /vagrant/projects/beta2/app/config/Migrations created ./app/config/Migrations/20141016121505_initial.php $
※マイグレーション名はキャメルケースなんで小文字はだめらしい
20141016121505_initial.php
<?php use Phinx\Migration\AbstractMigration; class Initial extends AbstractMigration { /** * Change Method. * * More information on this method is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * Uncomment this method if you would like to use it. * public function change() { } */ /** * Migrate Up. */ public function up() { $sample1 = $this->table("sample1"); $sample1 ->addColumn("name", "string", array("limit" => 128)) ->addColumn("deleted", "integer") ->addColumn("created", "datetime") ->addColumn("modified", "datetime") ->create() ; } /** * Migrate Down. */ public function down() { } }
※簡単にテーブルを作成する
実行
$ sh app/bin/cake migrations migrate Welcome to CakePHP v3.0.0-beta2 Console --------------------------------------------------------------- App : src Path: /vagrant/projects/beta2/app/src/ --------------------------------------------------------------- using migration path /vagrant/projects/beta2/app/config/Migrations using environment default using adapter mysql using database my_app == 20141016121505 Initial: migrating == 20141016121505 Initial: migrated 0.0321s All Done. Took 0.0578s $
※「20141016121505」が実行タイムスタンプ
DB内容
2回目
マイグレーションを作成
$ sh app/bin/cake migrations create Sample1 Welcome to CakePHP v3.0.0-beta2 Console --------------------------------------------------------------- App : src Path: /vagrant/projects/beta2/app/src/ --------------------------------------------------------------- using migration path /vagrant/projects/beta2/app/config/Migrations created ./app/config/Migrations/20141016124037_sample1.php $
20141016124037_sample1.php
<?php use Phinx\Migration\AbstractMigration; class Sample1 extends AbstractMigration { /** * Change Method. * * More information on this method is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * Uncomment this method if you would like to use it. * public function change() { } */ /** * Migrate Up. */ public function up() { $sample1 = $this->table("sample1"); $sample1 ->addColumn("age", "integer") ->addColumn("sex", "integer") ->save() ; } /** * Migrate Down. */ public function down() { } }
マイグレーション
$ sh app/bin/cake migrations migrate Welcome to CakePHP v3.0.0-beta2 Console --------------------------------------------------------------- App : src Path: /vagrant/projects/beta2/app/src/ --------------------------------------------------------------- using migration path /vagrant/projects/beta2/app/config/Migrations using environment default using adapter mysql using database my_app == 20141016124037 Sample1: migrating == 20141016124037 Sample1: migrated 0.0791s All Done. Took 0.0988s $
結果
3回目
マイグレーションファイルを作成
$ sh app/bin/cake migrations create Sample2 Welcome to CakePHP v3.0.0-beta2 Console --------------------------------------------------------------- App : src Path: /vagrant/projects/beta2/app/src/ --------------------------------------------------------------- using migration path /vagrant/projects/beta2/app/config/Migrations created ./app/config/Migrations/20141016125733_sample2.php $
20141016125733_sample2.php
<?php use Phinx\Migration\AbstractMigration; class Sample2 extends AbstractMigration { /** * Change Method. * * More information on this method is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * Uncomment this method if you would like to use it. * public function change() { } */ /** * Migrate Up. */ public function up() { // 変更 $sample1 = $this->table("sample1"); $sample1 ->removeColumn("age") ->renameColumn("sex", "seibetsu") ->addColumn("memo", "string") ->save() ; // テーブル作成 $sample2 = $this->table("sample2"); $sample2 ->addColumn("name", "string", array("limit" => 256)) ->addColumn("memo", "string") ->addColumn("memo2", "string") ->addColumn("deleted", "integer") ->addColumn("created", "datetime") ->addColumn("modified", "datetime") ->create() ; } /** * Migrate Down. */ public function down() { } }
実行
$ sh app/bin/cake migrations migrate Welcome to CakePHP v3.0.0-beta2 Console --------------------------------------------------------------- App : src Path: /vagrant/projects/beta2/app/src/ --------------------------------------------------------------- using migration path /vagrant/projects/beta2/app/config/Migrations using environment default using adapter mysql using database my_app == 20141016125733 Sample2: migrating == 20141016125733 Sample2: migrated 0.0860s All Done. Took 0.1146s $
結果
※新しいテーブルも追加されている
ロールバック
したらどうなる
実行
$ sh app/bin/cake migrations rollback Welcome to CakePHP v3.0.0-beta2 Console --------------------------------------------------------------- App : src Path: /vagrant/projects/beta2/app/src/ --------------------------------------------------------------- using migration path /vagrant/projects/beta2/app/config/Migrations using environment default using adapter mysql using database my_app == 20141016125733 Sample2: reverting == 20141016125733 Sample2: reverted 0.0020s All Done. Took 0.0259s $
結果
※前回実行したテーブルの定義は変わらないけど前回実行した履歴がなくなるのでやり直すことができる