edo1z blog

プログラミングなどに関するブログです

cakephp - Migrationsプラグインでエラーになった場合の対処について

Migrationsプラグインは便利なのですが、エラーがでるとわけわからなくなります。一度エラーがでるとMigrationsフィアルが空っぽになったりします。テーブルを削除して、Migrations.migration generate -fとやると、削除したテーブルが存在しないよエラーが出たりします。何なんでしょうか?ただいまこれにより、混乱中です。

Migrationsプラグインは、https://github.com/CakeDC/migrationsにあります。ここにドキュメントもあるので、読んで整理します。

まず、テーブルを削除したときにgenerateするとエラーになるというのは勘弁していただきたいです。 Comparing schema.php to the database...のあとにエラーになります。現在のschema.phpと、現状のDBの状態を比較しようとするときにテーブル自体が存在しないとエラーがでるようです。これを回避する方法はあるのでしょうか?比較しなければいいとは思いますが、その場合、自動的にマイグレーションファイルが作成されることはございません。

-fというのは、モデルがなくても適用したい場合に使うようです。モデルが存在している状態でテーブルを削除するとエラーがでるのかもしれません。テーブルを削除する場合はモデルを削除してからgenerateする必要があるのかもしれません。本当でしょうか?キャッシュが残ってるとモデルが存在するのにテーブルがないのでエラーを出すのかもしれません。今すでにモデルを削除しておりますが、テーブルがないよエラーが出ていたのですが、キャッシュを削除するとエラーがでなくなりました。。記載している内容がどこまで正確かわかりませんが、また同じ問題が起こったときの参考に、これを残しておきます。

次に、なんで空っぽのmigrationsファイルが作成されたのでしょうか?これももしかしたらキャッシュの問題なのかもしれません。当然schema.phpを比較している状態だったのですが、空っぽになりました。とりえあず、Migrationファイルを作成するときは、削除するテーブルのモデルも削除し、キャッシュも削除してから作成するのが安全そうだと思いました。-fはモデルの作成が不要なテーブルもマイグレーションで管理したい場合に利用するものになるというのも覚えておけば、混乱が少なくなるかなと思いました。

ちなみに、cake Migrations.migration run resetとやると、テーブル構成が最初の最初に戻りますのでデータ全部消えますので、ご注意ください。