Symfony:如何向具有条目的实体添加非可空字段

时间:2018-03-26 11:05:50

标签: symfony doctrine-orm

我有一个实体主题,其中包含先前设置的属性(id,name),主题表现已填充。 自项目发展以来,我需要一个新的属性目录。但问题是这个属性必须是非空的。

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;
}

doctrine: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);

问题是如果我做了doctrine: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`))

我设法解决这个错误的唯一方法就是不是一步到位:

  1. 我将目录字段设置为可以为空的
  2. 我将默认目录值设置为整个表
  3. 我将目录字段设置为不可为空的
  4. 这至多不是最佳的。有没有办法在“一次通过”中执行这种修改?

1 个答案:

答案 0 :(得分:0)

当然,您可以使用Doctrine Migrations

立即执行此操作

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