这是我自己无法解决的情况。
我有一个包含数据库,模型等的现有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!
错误仍然存在。
有人知道发生了什么或者有什么解决方案吗?
有什么建议吗?
答案 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-db
和doctrine:generate-migrations-models
造成的,
但Symfony的迁移教程对此并不十分清楚。
为什么我同时使用它们?
当我完成./symfony doctrine:generate-migration-db
时,只创建了一半的迁移类。这很奇怪 - 只有一般表格,没有相关的表格!所以我致电doctrine:generate-migrations-models
。
<强>结论强>
另一个问题提出:为什么doctrine:generate-migrations-db
不为模型的相关表生成迁移类?