我在一个symfony2.1项目中使用doctrine2。我有一个实体,它与其他表有一些多对一的关系。这些多对一的外键关系已经在数据库中进行了更新,但是每次我运行迁移:diff或schema:update --dump-sql时,它都会添加相同的更新命令来再次添加外键关系。当我运行schema:validate时,它显示我的映射与我的数据库不同步。
我的应用程序运行良好,关系运行正常,数据库中的模式看起来也是正确的。为什么doctrine仍然试图添加这些外键?
下面是我的代码(其中一个有问题的参数):
在我的“工单”实体中,我有:
/**
* 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,即使它已经在数据库中:
$this->addSql("ALTER TABLE tickets ADD CONSTRAINT FK_54469DF4BB0D9452 FOREIGN KEY (scoring_user_id) REFERENCES users (id)");你知道我哪里做错了吗?
发布于 2014-02-27 15:34:17
为什么doctrine仍然试图添加这些外键?
这里正确的术语是“外键约束”。如果没有约束,有问题的列就只是一个列。它是强制该列的值作为主键存在于另一个表中的约束。
为什么doctrine仍然试图添加这些外键?
因为数据库供应商/引擎不支持外键约束,但Doctrine无法识别这一点。
如果非要我猜的话,那就是您在MyISAM引擎中使用了MySQL。MyISAM不支持外键约束。不幸的是,Doctrine还不够“聪明”,看不到这一点。它看到使用了MySQL,因此盲目地假设支持外键约束。
我的建议是,除非您有充分的理由使用MyISAM,否则请切换到InnoDB引擎。
ALTER TABLE table_name ENGINE=InnoDB;Converting Tables from MyISAM to InnoDB
https://stackoverflow.com/questions/15721712
复制相似问题