マイグレーションファイルの作成
データベースの更新サイクルについて
CakeDC Migrationsプラグインを利用したデータベースの更新サイクルは、次の二つがあります。
Auto-Migration Files
データベースは手動で更新し、更新した内容をもとに自動的にマイグレーションファイルを作成する。
この場合、データベースは手動で更新しているので、自分ではマイグレーションファイルを使いません。作成したマイグレーションファイルは、gitでコミットし、他の開発者が使います。
扱えるのは、テーブル情報のみ(カラムやインデックスなど)です。レコードは扱えません。Manually Creating Migration
空のマイグレーションファイルを作成し、更新したいデータベースの作業を自分で記述する。マイグレーションファイルを適用して、データベースを更新する。
この場合、空のマイグレーションファイルに、更新時(up)の手続きと、ロールバック時(down)の手続きを記述します。また、beforeとafterメソッドに手続きを記述することで、レコードの追加やデータの変更(新しく出来たカラムに初期値を入れるなど)なども可能です。レコードの追加は、基本的にモデルを通して行います。
Auto-Migration Files
-
もしまだやっていなければ、最初のマイグレーションを行います。
$ Console/cake Migrations.migration run reset
-
次に、現在のデータベースの状況に対応したSchemaファイルを作成します。
$ cake schema generate -f
(スキーマファイルの作り方を尋ねられたら、既存のスキーマファイルを上書きするのであればOverwriteを選択します。Snapshotでも問題ないかは未確認)
オプションの"-f"は、モデルがないテーブルについてもスキーマを作成する場合につけます。 この状態で、SQLを使って、テーブルの追加、カラムの変更などを行います。
-
その後、
$ Console/cake Migrations.migration generate -f
で、新しいマイグレーションファイルを作成します。
オプションの"-f"は、モデルがないテーブルについてもマイグレーションファイルを作成する場合につけます。Do you want compare the schema.php file to the database? (y/n)
と尋ねられたらyと答えて下さい。これで、マイグレーションファイルが出来ました。この新しいマイグレーションファイルに合わせて、スキーマファイルを更新するか尋ねられるので、更新しない(Quit)か、上書き(Overwrite)してください。
保存時の名前は適当につけてください。ファイル名は、入力した名前の前に、現在のタイムスタンプが付きます。
Manually Creating Migration
-
もしまだやっていなければ、最初のマイグレーションを行います。
$ Console/cake Migrations.migration run reset
-
空のマイグレーションファイルを作成します。
$ Console/cake Migrations.migration generate
ここで
Do you want compare the schema.php file to the database? (y/n)
と尋ねられたらnと答えて下さい。これで、マイグレーションファイルが出来ました。
-
マイグレーションファイルを編集してください。たとえば、テーブルを作るのであれば、
'up' => array( 'create_table' => array( 'categories' => array( 'id' => array( 'type' =>'string', 'null' => false, 'default' => null, 'length' => 36, 'key' => 'primary' ), 'name' => array( 'type' =>'string', 'null' => false, 'default' => null ), 'indexes' => array( 'PRIMARY' => array( 'column' => 'id', 'unique' => 1 ) ) ) )
となります。その他の記述法については、
https://github.com/CakeDC/migrations/blob/master/Docs/Documentation/Migrations.md
を参考にしてください。
保存時の名前は適当につけてください。ファイル名は、入力した名前の前に、現在のタイムスタンプが付きます。 -
マイグレーションファイルが出来たら、マイグレーションファイルを実行します。
$ Console/cake Migrations.migration run
一つずつマイグレーションファイルを適用する場合、runではなくupを使います。
その他
現在のマイグレーションの状態は
$ Console/cake Migrations.migration status
で確認できます。
参考サイト
ドキュメント
https://github.com/CakeDC/migrations/tree/master/Docs/Documentation
チュートリアル
https://github.com/CakeDC/migrations/blob/master/Docs/Tutorials/Quick-Start.md