2014年6月7日土曜日

[CakePHP]CakeDC/migrationsの微妙な仕様

ここによるとModelが存在しないテーブルのmigrationは以下のように-fをつけてあげるとできる。これをつけないと、差分として検知されない。
ここでは例えば、Aというテーブルを作成した場合とする。


cake Migrations.migration generate -f

このコマンドから始まるプロンプトを進めて行くと、以下のように

Do you want update the schema.php file? (y/n)

schema.phpを更新するか聞かれて、自分はいつも通り、yを選択する。

で、次にDB定義変更をしてmigrationをする機会が訪れたとする。

今度は普通にModelが存在するテーブルBだったので、以下のように-fはつけない。

cake Migrations.migration generate

そうすると何が起こるかというと、①で作成したテーブルAをdropするmigrationが作成されてしまう。

なぜかというと、②でも-fが有効になっているらしく、ここで生成されるschema.phpにはテーブルAが入ってしまう。migrationの仕組みは現実のDB定義とschema.phpを比較して差分をmigrationファイルとする。なので、③で-fをつけないのからモデルのないテーブルは検知されないため、schema.phpにあるAテーブルは、現実のDBには存在しないよ、となり、じゃあ削除するマイグレーションファイル作りますね、と判断してしまうのだ。

イケてないですね。

なので、 -fをつける場合は②はnを選択したほうがよさそうですね。





0 件のコメント:

コメントを投稿