Symfony 1.4迁移抛出SQLSTATE [HY000]:一般错误:1005(错误150) - doctrine:migrate失败!

时间:2011-07-26 11:14:24

标签: mysql symfony1 doctrine migration

这是我自己无法解决的情况。

我有一个包含数据库,模型等的现有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

这很奇怪。我有更多的表关系,他们被创建,但那个失败了。我已经检查了我能想到的一切。索引类型,表格类型,月亮的阶段 - 一切似乎都可以。我试着设置FOREIGN_KEY_CHEKS = 0来追逐一些鬼魂,但NADA!

错误仍然存​​在。

有人知道发生了什么或者有什么解决方案吗?

有什么建议吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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之前。

包含创建所有关系(外键和约束)的类的文件13116785578_addfks.php,但它尝试在非现有表(在我的情况下为product_group)上添加约束,这将在最后创建)。因此,SQL错误意味着YOU ARE TRYING TO CREATE A RELATION WITH UNEXISTING TABLE, YOU MORON!:)

我的解决方法是将13116785578_addfks.php重命名为13116785590_addfks.php,因为它强制学说合并机器执行它作为最后一步。执行完所有表后,MySQL服务器很高兴!

那么,这次错过订购的原因是什么?

可能是因为混合任务doctrine:generate-migrations-dbdoctrine:generate-migrations-models造成的, 但Symfony的迁移教程对此并不十分清楚。

为什么我同时使用它们?

当我完成./symfony doctrine:generate-migration-db时,只创建了一半的迁移类。这很奇怪 - 只有一般表格,没有相关的表格!所以我致电doctrine:generate-migrations-models

<强>结论

另一个问题提出:为什么doctrine:generate-migrations-db不为模型的相关表生成迁移类?