4

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

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

根据快速搜索,此错误发生在违反外部约束的情况下。正确的方法是让原则在ALTERing 表时禁用外键检查。

对此我能做些什么(除了修补 Dcotrine)?

此外,我还指定:

'engine' => 'myisam',

...在 中connectionOptions,但它被忽略了。


编辑:

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

4

1 回答 1

3

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

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

SHOW CREATE TABLE mytable;

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

    ALTER TABLE mytable 
DROP CONSTRAINT mytable_fk;

下次你运行 updateSchema 时,Doctrine 将检测丢失的限制,并在需要时重新创建它。

于 2013-02-10T09:31:33.010 回答