Doctrine2 updateSchema与外键冲突

时间:2012-04-23 07:01:46

标签: mysql doctrine foreign-keys

updateSchema使用空数据库运行良好,但第二次出现以下MySQL错误:

SQLSTATE[HY000]: General error: 1025 Error on rename of
    './mydatabase/#sql-7f5_2b' to
    './mydatabase/mytable' (errno: 150)

根据快速搜索,此错误发生在外部约束违规上。正确的方法是在ALTER表格时禁用外键检查。

我可以做些什么(除了修补Dcotrine)吗?

我还指定了更多:

'engine' => 'myisam',

...在connectionOptions中,但会被忽略。


修改

当我从包含mytable引用的其他表中删除外键时,错误不会发生(它将在下一个表中发生,它仍由FK引用,但不会引用mytable)。< / p>

1 个答案:

答案 0 :(得分:3)

不幸的是,Doctrine并没有完全正确处理这种情况。

您应该自己禁用约束,让Doctrine重新创建它们。 要禁用约束,请连接到MySQL并键入:

SHOW CREATE TABLE mytable;

它将为您提供创建表所需的SQL,您将在其中看到约束创建指令。假设约束被称为'mytable_fk',那么您需要发出命令:

    ALTER TABLE mytable 
DROP CONSTRAINT mytable_fk;

下次运行updateSchema时,Doctrine将检测缺少的限制,并在需要时重新创建。