cje*_*wby 24 php mysql symfony doctrine-orm doctrine-migrations
我正在使用doctrine2和symfony2.1项目.我有一个与其他表有多对多关系的实体.这些多对一的外键关系已在数据库中更新,但每次运行迁移时:diff或schema:update --dump-sql都会添加相同的更新命令以再次添加外键关系.当我运行schema时:验证它说我的映射与我的数据库不同步.
我的应用程序工作正常,关系正常工作,我的数据库中的架构看起来正确.为什么教条还在尝试添加这些外键?
这是我的代码(对于一个有问题的参数):
在我的"Ticket"实体中,我有:
/**
* Authenticated User who scored the ticket.
*
* @ORM\ManyToOne(targetEntity="CS\SecurityBundle\Entity\User")
* @ORM\JoinColumn(name="scoring_user_id", referencedColumnName="id")
*/
protected $scoringUser;
Run Code Online (Sandbox Code Playgroud)
我目前将其设置为单向,因此User实体中没有inversedBy.
这会在我的迁移或模式中生成以下内容:更新转储,即使它已在数据库中:
$this->addSql("ALTER TABLE tickets ADD CONSTRAINT FK_54469DF4BB0D9452 FOREIGN KEY (scoring_user_id) REFERENCES users (id)");
Run Code Online (Sandbox Code Playgroud)
知道我在这里做错了吗?
Jas*_*wer 12
为什么教条还在尝试添加这些外键?
这里正确的术语是"外键约束".没有约束,有问题的列只是一列.它是强制执行该列的值作为另一个表中的主键存在的约束.
为什么教条还在尝试添加这些外键?
因为数据库供应商/引擎不支持外键约束,但Doctrine无法识别.
如果我不得不猜测,你正在使用MySQL和MyISAM引擎.MyISAM不支持外键约束.不幸的是,Doctrine并不够"聪明".它看到使用MySQL,因此盲目地假设支持外键约束.
我的建议是切换到InnoDB引擎,除非你有充分的理由使用MyISAM.
ALTER TABLE table_name ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2042 次 |
| 最近记录: |