Symfony:如何将不可为空的字段添加到具有条目的实体中

Symfony:如何将不可为空的字段添加到具有条目的实体中,symfony,doctrine-orm,Symfony,Doctrine Orm,我有一个实体主题,前面设置了属性(id、名称),主题表现在已填充。 由于项目不断发展,我需要一个新的属性目录。但问题是这个属性必须是非null的 class Topic { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /**

我有一个实体主题,前面设置了属性(id、名称),主题表现在已填充。 由于项目不断发展,我需要一个新的属性目录。但问题是这个属性必须是非null的

class Topic
{
  /**
   * @var integer
   *
   * @ORM\Column(name="id", type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="IDENTITY")
   */
  private $id;

  /**
   * @var \MyBundle\Entity\Catalog
   * @ORM\ManyToOne(targetEntity="MyBundle\Entity\Catalog")
   * @ORM\JoinColumns({
   *   @ORM\JoinColumn(name="catalogId", referencedColumnName="id", nullable=false)
   * })
   * @Assert\NotBlank()
   */
  private $catalog;

  /**
   * @var string
   *
   * @ORM\Column(name="name", type="string", length=255, nullable=false)
   * @Assert\NotBlank()
   */
  private $name;
}
原则:schema:update--dump-sql
正常:

ALTER TABLE topic ADD catalogId INT NOT NULL;
ALTER TABLE topic ADD CONSTRAINT FK_9D40DE1B19B71A2D FOREIGN KEY (catalogId) REFERENCES catalog (id);
CREATE INDEX IDX_9D40DE1B19B71A2D ON topic (catalogId);
问题是如果我做了一个
原则:schema:update--force
我有一个错误,说明我不能

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`simspeaker`.`#sql-3d2  
  _71`, CONSTRAINT `FK_9D40DE1B19B71A2D` FOREIGN KEY (`catalogId`) REFERENCES `catalog` (`id`))
我设法绕过此错误的唯一方法是不一步到位:

  • 我将catalog字段设置为null
  • 我为整个表设置了默认目录值
  • 我将catalog字段设置为不可为空

  • 这充其量也不是最优的。有没有办法在“一次通过”中执行此类修改?

    当然,您可以使用


    问题是合乎逻辑的,如果密钥(在您的情况下,密钥为0)不存在,则无法创建外键。

    我理解错误,但我看不出迁移在这里有什么帮助?你是说用我说的三个步骤准备一个迁移,然后播放迁移吗?这仍然是三个步骤,一排,一次迁移,不是吗?还是我不明白你关于迁移的部分?唉,我还有另一个用例,比这个“更糟糕”。我将为它创建另一个主题。我将迁移视为一个步骤。因此,在该迁移中,您可以执行“三个步骤”,但同时执行。