首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Doctrine 1.1确定MySQL表的外键约束?

如何使用Doctrine 1.1确定MySQL表的外键约束?
EN

Stack Overflow用户
提问于 2010-10-27 05:11:56
回答 2查看 658关注 0票数 0

当两个模型相互关联时,Doctrine会自动在MySQL数据库中漂亮地生成外键约束。onDelete和onUpdate的默认行为是限制,但也可以设置为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有特定的原因,但那是另一回事。我宁愿被指向代码更改提供此修复的方向,这可能是更接近解决方法的一步。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-15 17:18:48

回答我自己的问题:我查看了Doctrine源代码很长一段时间,发现MySQL导入器没有这样做的功能。

换句话说,不自己扩展Doctrine是不可能的。

票数 0
EN

Stack Overflow用户

发布于 2010-10-27 05:25:44

嗯,我从来没有遇到过这个问题。但我通常将Doctrine与Symfony一起使用,他们可能已经定制了迁移工具,而不仅仅是将它们挂钩到Symfony CLI界面。

如果我是您,我会从DB生成一个新的schmea,然后从更新后的模式生成迁移(我认为将模式与模型进行比较)。然后再重新生成我的模型。

但是,我建议让模式具有权威性。如果您必须使用遗留数据库,则在启动时从DB生成您的模式。然后,所有的数据库在那之后进行更改,对模式进行修改,然后使用schmea/model进行迁移。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4028071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档