gpt4 book ai didi

php - 如何停止 Doctrine2 迁移 :Diff from always adding foreign key relationships that already exist in Database?

转载 作者:IT老高 更新时间:2023-10-28 23:47:01 26 4
gpt4 key购买 nike

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

我的应用程序运行良好,关系运行正常,并且我的数据库中的架构看起来正确。为什么教义还在尝试添加这些外键?

这是我的代码(用于有问题的参数之一):

在我的“票”实体中,我有:

/**
* 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。

这会在我的迁移或架构中生成以下内容:更新转储,即使它已经在数据库中:

$this->addSql("ALTER TABLE tickets ADD CONSTRAINT FK_54469DF4BB0D9452 FOREIGN KEY (scoring_user_id) REFERENCES users (id)");

知道我在这里做错了什么吗?

最佳答案

Why is doctrine still trying to add these foreign keys?

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

Why is doctrine still trying to add these foreign keys?

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

如果我不得不猜测,您正在使用带有 MyISAM 引擎的 MySQL。 MyISAM 不支持外键约束。不幸的是,Doctrine 不够“聪明”,无法看到这一点。看到用的是MySQL,所以盲目假设支持外键约束。

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

ALTER TABLE table_name ENGINE=InnoDB;

Converting Tables from MyISAM to InnoDB

关于php - 如何停止 Doctrine2 迁移 :Diff from always adding foreign key relationships that already exist in Database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com