模式更新时添加现有外键(mysql)

模式更新时添加现有外键(mysql),mysql,symfony,doctrine-orm,Mysql,Symfony,Doctrine Orm,我拥有以下实体: A.php 最后一个命令打印: ALTER TABLE a ADD CONSTRAINT FK_E8B7BE43296BFCB6 FOREIGN KEY (b_id) REFERENCES b (id); 但是这个约束是在之前添加的,所以我不能使用它 php bin/console doctrine:schema:update --force 两次没有错误 只有在使用MySQL时才会发生这种行为。当我删除MySQL并安装MariaDB时,问题消失了 我应该在我的实体中引入变

我拥有以下实体:

A.php

最后一个命令打印:

ALTER TABLE a ADD CONSTRAINT FK_E8B7BE43296BFCB6 FOREIGN KEY (b_id) REFERENCES b (id);
但是这个约束是在之前添加的,所以我不能使用它

php bin/console doctrine:schema:update --force
两次没有错误

只有在使用MySQL时才会发生这种行为。当我删除MySQL并安装MariaDB时,问题消失了


我应该在我的实体中引入变更,还是说这是一个原则的缺陷?

这似乎是一个缺陷。尝试使用doctrinExportations捆绑包,以便在应用迁移类之前可以控制它们。

尝试使用postgresqlWith Postgresql此示例代码可以正常工作。问题只针对MySQL。您得到的异常是什么?异常告诉约束已经存在。最后我将MySQL更改为MariaDB。当然也有解决方法——使用简单脚本和grep,但是迁移到MariaDB更简单。
<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="c")
 * @ORM\Entity()
 */
class C
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="A", mappedBy="c")
     */
    private $a;
}
<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="d")
 * @ORM\Entity()
 */
class D
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="A", mappedBy="d")
     */
    private $a;
}
php bin/console doctrine:database:create
php bin/console doctrine:schema:update --force
php bin/console doctrine:schema:update --dump-sql
ALTER TABLE a ADD CONSTRAINT FK_E8B7BE43296BFCB6 FOREIGN KEY (b_id) REFERENCES b (id);
php bin/console doctrine:schema:update --force