我有一个实体主题,其中包含先前设置的属性(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`))
我设法解决这个错误的唯一方法就是不是一步到位:
这至多不是最佳的。有没有办法在“一次通过”中执行这种修改?