Symfony:如何将不可为空的字段添加到具有条目的实体中
我有一个实体主题,前面设置了属性(id、名称),主题表现在已填充。 由于项目不断发展,我需要一个新的属性目录。但问题是这个属性必须是非null的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; /**
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`))
我设法绕过此错误的唯一方法是不一步到位:
这充其量也不是最优的。有没有办法在“一次通过”中执行此类修改?当然,您可以使用
问题是合乎逻辑的,如果密钥(在您的情况下,密钥为0)不存在,则无法创建外键。我理解错误,但我看不出迁移在这里有什么帮助?你是说用我说的三个步骤准备一个迁移,然后播放迁移吗?这仍然是三个步骤,一排,一次迁移,不是吗?还是我不明白你关于迁移的部分?唉,我还有另一个用例,比这个“更糟糕”。我将为它创建另一个主题。我将迁移视为一个步骤。因此,在该迁移中,您可以执行“三个步骤”,但同时执行。