编程语言
首页 > 编程语言> > PHP-Symfony2:删除时断开关联

PHP-Symfony2:删除时断开关联

作者:互联网

我有两个实体-背景和操作.
背景有很多动作.

当我删除背景时,我想保留操作,但将外键设为空.以满足约束的方式有效地孤立实体.
我已经阅读了许多有关cascade = {“ remove”}和orphanRemoval的文章和问题,但所有这些似乎都导致删除了孤立的Action(根本不是我想要的)或什么都不做-这导致违反完整性约束.

SQLSTATE[23000]: Integrity constraint violation: 
1451 Cannot delete or update a parent row: 
a foreign key constraint fails (`Action`, CONSTRAINT
`FK_B7722E25C93D69EA` FOREIGN KEY (`background_id`) 
REFERENCES `Background` (`id`)) 

现在,我发现的解决方案是遍历相关的动作,并使该字段为空并保持不变.这不是前进的最佳方法.

foreach ($background->getActions() as $action) {
  $action->setBackground(null);
}

解决方法:

您可以使用可以使引用无效的主义ondelete行为来实现此目的.

这是我在旧的sf2.3项目中如何实现此目的的示例:

/**
 * Workaround for circular reference:
 * https://stackoverflow.com/questions/14257004/doctrine2-symfony2-cascading-remove-integrity-constraint-violation-1451
 */

/**
 * @ORM\OneToOne(targetEntity="Acme\DashboardBundle\Entity\AlternativeProposal")
 * @ORM\JoinColumn(name="selected_alternative_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
 */
protected $selectedAlternative;

希望这可以帮助

标签:doctrine-orm,symfony,orphan,relationships,php
来源: https://codeday.me/bug/20191120/2046501.html