2011-07-26 20 views
0

私は自分で解決できない状況です。Symfony 1.4の移行でSQLSTATE [HY000]が発生する:一般的なエラー:1005(err 150) - doctrine:migrate failed!

私は私がやったように、移行を作りたいデータベース、モデルおよびなどで既存のsymfony 1.4のプロジェクトがあります。

./symfony cc 
./symfony doctrine:generate-migrations-db 
./symfony doctrine:generate-migrations-model 

の移行のためのすべてのクラスが作成されたので、私が試したが

./symfony doctrine:drop-db 
./symfony doctrine:build-db 
./symfony doctrine migrate 

移行プロセスがクラッシュします。それはエラーです:

- SQLSTATE[1005]: General error: 1005 Can't create table 'database.#sql-6df_301' (errno: 150). Failing Query: "ALTER TABLE product ADD CONSTRAINT "product_product_group_id_product_group_id FOREIGN KEY (product_group_id) REFERENCES product_group(id) ON DELETE CASCADE 

これは変です。私は関係のあるテーブルを増やしていますが、それらは作成されていますが、失敗します。私は考えることができるすべてをチェックしました。インデックスの種類、テーブルの種類、月の位相 - すべてがOKであるようです。私はいくつかの幽霊を追跡するためにSET FOREIGN_KEY_CHEKS = 0にしようとしましたが、NADA!

エラーがまだ発生します。

誰かが何が起きているのか、それとも解決策を知っていますか?

提案がありますか?

+0

私はそれを分解しましたが、STACKOVERFLOWが私の質問にとても早く答えるためには私の評判が低すぎるようです。 5時間後に私は答えを掲示するでしょう。ヒント:誤って順序付けられた移行ファイル。 – Lyubo

答えて

0

私はそれを解読しました。

は、いくつかの陽気な理由で自動生成されたマイグレーションクラスは、このように命名されています

1311678541_add<table-name>.php 
1311678542_add<table-name>.php 
1311678543_add<table-name>.php 
... 
13116785578_addfks.php 
... 
1311678579_add<table-name>.php 
1311678580_add<table-name>.php 
1311678582_addproductgroup.php 

13116785578_addfks.phpファイルが1311678582_addproductgroup.phpの前に表示されます。

すべてのリレーション(外部​​キーと制約)を作成するクラスが含まれていますが、既存のテーブルに制約を追加しようとします(私の場合は最後に作成されるproduct_group)。したがって、SQLエラーはYOU ARE TRYING TO CREATE A RELATION WITH UNEXISTING TABLE, YOU MORON!を意味します。

私の解決は、最後のステップとしてdoctrineマージマシンに実行させるため、13116785578_addfks.phpから13116785590_addfks.phpに名前を変更することです。実行されると、すべてのテーブルはすでに作成されており、MySQLサーバは満足しています!

このミスオーダーの理由はどうですか?

は、おそらくそれは、タスクdoctrine:generate-migrations-dbdoctrine:generate-migrations-modelsまでmixi'nによって引き起こさ が、symfonyの移行チュートリアルはこれで非常に明確ではありません。

なぜ私はそれらの両方を使用しますか?

私が./symfony doctrine:generate-migration-dbを実行したとき、移行のクラスの半分だけが作成されました。それは奇妙です - 一般的なテーブルだけがあり、関連するテーブルはありません!だから私はdoctrine:generate-migrations-modelsと呼んだ。

結論はもう一つの問題は発生しますdoctrine:generate-migrations-dbは、モデルの関連テーブルのためのマイグレーションクラスを生成しないのはなぜ?

1

generate-migrations-modelsは使用しないでください。シーケンス

./symfony cc 
./symfony doctrine:generate-migrations-db 
./symfony doctrine:drop-db 
./symfony doctrine:build-db 
./symfony doctrine migrate 

./symfony doctrine:generate-migrations-models 

は、マイグレーションを生成するモデルクラスを使用してラインでそれを試してみてください。物事を邪魔しているモデルを忘れてしまう可能性があるので、必ずしも良い考えではありません。これらの忘れたモデルをクリーニングするには、上記のコマンドを開始する前に、次のコマンドを使用します。

./symfony doctrine:clean-model-files 
+0

ええ、私はそれを考え出した。これら2つのタスクとのミキシングが問題でした。移行用に自動生成されたファイルは誤ってオーダーされ、すべてのテーブルが作成される前にFK作成が実行されていました。ありがとうございました。 – Lyubo

関連する問題