【发布时间】:2011-04-30 23:52:50
【问题描述】:
当两个模型相互关联时,Doctrine 会自动在 MySQL 数据库中漂亮地生成外键约束。 onDelete 和 onUpdate RESTRICT 的默认行为,但也可以设置为 SET NULL 或 CASCADE。
现在,我想创建一个从现有数据库与 YAML 文件相比的迁移差异。为此,我使用了Doctrine::generateModelsFromDB() 函数。我使用 Doctrine_Migration_Diff 的重载版本为我做差异工作,它负责不匹配的类名、MySQL 字段长度等。它可以很好地完成所有事情,但是这些外键约束存在问题。
当我从 MySQL 数据库创建 PHP 类时,Doctrine 似乎没有将“onDelete”和“onUpdate”设置为适当的值。然后,当我尝试将这些 PHP 类与设置了“onDelete”和/或“onUpdate”的类进行比较时,Doctrine 会尝试添加一个已经存在的新外键,而 MySQL 失败了。
我通过手动忽略重载的 Doctrine_Migration_Diff 中所有已更改的外键来临时解决此错误,但这确实不是解决方案。
我想要什么:如果 Doctrine 认为需要添加一个新的外键,那么它可能已经存在,并且它的 onDelete 和 onUpdate 行为设置为什么。如果我有本地字段名称和外部字段名称,我该如何检查?
附:如果有人确定这在 Doctrine 1.2 中已修复(我对此表示怀疑),请不要建议我升级。在这种情况下,我有特定的理由使用 1.1,但这是另一回事。我宁愿指出提供此修复程序的代码更改的方向,这可能更接近解决方法。
【问题讨论】:
标签: php mysql doctrine foreign-keys constraints