Symfony2:删除时断开关联



我有两个实体 - BackgroundAction .Background有很多Actions.

当我删除Background时,我想保留Action但将外键为空。以满足约束的方式有效地孤立实体。我已经阅读了很多关于 cascade={"remove"}orphanRemove 的文章和问题,但所有这些似乎都会导致删除孤立的操作(根本不是我想要的)或不执行任何操作 - 这会导致完整性违规。

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);
}
您可以使用可以使

引用为空的 iston delete 行为来实现此目的。

以下是我如何在旧的 sf2.3 项目中实现这一点的示例:

/**
 * Workaround for circular reference:
 * http://stackoverflow.com/questions/14257004/doctrine2-symfony2-cascading-remove-integrity-constraint-violation-1451
 */
/**
 * @ORMOneToOne(targetEntity="AcmeDashboardBundleEntityAlternativeProposal")
 * @ORMJoinColumn(name="selected_alternative_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
 */
protected $selectedAlternative;

希望这有帮助

最新更新