首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止Doctrine2迁移:不同于总是添加数据库中已经存在的外键关系?

如何停止Doctrine2迁移:不同于总是添加数据库中已经存在的外键关系?
EN

Stack Overflow用户
提问于 2013-03-31 02:05:06
回答 1查看 2.8K关注 0票数 26

我在一个symfony2.1项目中使用doctrine2。我有一个实体,它与其他表有一些多对一的关系。这些多对一的外键关系已经在数据库中进行了更新,但是每次我运行迁移:diff或schema:update --dump-sql时,它都会添加相同的更新命令来再次添加外键关系。当我运行schema:validate时,它显示我的映射与我的数据库不同步。

我的应用程序运行良好,关系运行正常,数据库中的模式看起来也是正确的。为什么doctrine仍然试图添加这些外键?

下面是我的代码(其中一个有问题的参数):

在我的“工单”实体中,我有:

代码语言:javascript
复制
/**
 * Authenticated User who scored the ticket. 
 *
 * @ORM\ManyToOne(targetEntity="CS\SecurityBundle\Entity\User")
 * @ORM\JoinColumn(name="scoring_user_id", referencedColumnName="id")
 */
protected $scoringUser;

我目前将它设置为单向的,因此在User实体中没有inversedBy。

这将在我的迁移或模式中生成以下内容:update dump,即使它已经在数据库中:

代码语言:javascript
复制
$this->addSql("ALTER TABLE tickets ADD CONSTRAINT FK_54469DF4BB0D9452 FOREIGN KEY (scoring_user_id) REFERENCES users (id)");

你知道我哪里做错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 15:34:17

为什么doctrine仍然试图添加这些外键?

这里正确的术语是“外键约束”。如果没有约束,有问题的列就只是一个列。它是强制该列的值作为主键存在于另一个表中的约束。

为什么doctrine仍然试图添加这些外键?

因为数据库供应商/引擎不支持外键约束,但Doctrine无法识别这一点。

如果非要我猜的话,那就是您在MyISAM引擎中使用了MySQL。MyISAM不支持外键约束。不幸的是,Doctrine还不够“聪明”,看不到这一点。它看到使用了MySQL,因此盲目地假设支持外键约束。

我的建议是,除非您有充分的理由使用MyISAM,否则请切换到InnoDB引擎。

代码语言:javascript
复制
ALTER TABLE table_name ENGINE=InnoDB;

Converting Tables from MyISAM to InnoDB

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

https://stackoverflow.com/questions/15721712

复制
相关文章

相似问题

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