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>
答案 0 :(得分:3)
不幸的是,Doctrine并没有完全正确处理这种情况。
您应该自己禁用约束,让Doctrine重新创建它们。 要禁用约束,请连接到MySQL并键入:
SHOW CREATE TABLE mytable;
它将为您提供创建表所需的SQL,您将在其中看到约束创建指令。假设约束被称为'mytable_fk',那么您需要发出命令:
ALTER TABLE mytable
DROP CONSTRAINT mytable_fk;
下次运行updateSchema时,Doctrine将检测缺少的限制,并在需要时重新创建。