SYMFONY:如何将不可定位的字段添加到带有条目的实体



我有一个实体主题,该实体主题先前设置了属性(id,name(和主题表现在已填充。由于该项目的发展,我需要一个新的属性目录。但是事实是,此属性必须是非零的。

class Topic
{
  /**
   * @var integer
   *
   * @ORMColumn(name="id", type="integer")
   * @ORMId
   * @ORMGeneratedValue(strategy="IDENTITY")
   */
  private $id;
  /**
   * @var MyBundleEntityCatalog
   * @ORMManyToOne(targetEntity="MyBundleEntityCatalog")
   * @ORMJoinColumns({
   *   @ORMJoinColumn(name="catalogId", referencedColumnName="id", nullable=false)
   * })
   * @AssertNotBlank()
   */
  private $catalog;
  /**
   * @var string
   *
   * @ORMColumn(name="name", type="string", length=255, nullable=false)
   * @AssertNotBlank()
   */
  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. 我将目录字段设置为非无效

充其量不是最佳的。有没有办法在"一通"中执行这种修改?

这里似乎没有答案,这是Google上的第一个结果,所以我只是写一个快速的结果。

在您的迁移中:

  • 首先将新字段添加为无效
  • 使用适当的数据更新新字段
  • 将新字段更改为无效

voila。

我将在中间步骤中添加一个警告,写SQL查询,不要使用学说,因为这将来会引起头痛。实体可能会以与您的代码不相容的方式改变。然后,您的迁移将会破裂,您会感到难过。我不想让你难过。

当然,您可以立即使用学说迁移

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

相关内容

  • 没有找到相关文章

最新更新