使用原则处理完整性约束违规



我知道SO上有类似的问题,但我没有找到答案。

当我尝试删除与另一个类EntityB具有 oneToMany 关联的类EntityA的实体并且有一个与EntityA关联的EntityB时,我收到以下错误:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`example_table`.`entity_b`, CONSTRAINT `FK_CAC822D9B8F92CD8` FOREIGN KEY (`entity_a_id`) REFERENCES `entity_a` (`id`))

(我将真实实体名称更改为EntityAEntityB(

我尝试配置 Doctrine 以将该关系的拥有端的外键设置为通过cascade设置进行NULL。但我认为,因为我在非拥有方使用它,所以它不起作用。但我不确定情况是否如此。

编辑:事实上,如果将级联:分离选项设置为拥有方,我真的不确定它应该做什么。也许我缺少对教义要点的一些理解......

我知道有SQL触发器(可以对删除事件等进行操作(以及一种配置原则以配置它们的方法,但我想将该逻辑保留在我的应用程序代码中。

我还希望避免迭代集合,检查是否设置了关系,然后由于性能原因将它们设置为NULL

我做错了什么?如何避免抛出的错误?

下面是实体类中的两个相关映射定义:

实体 A

class EntityA {
/**
* @ORMOneToMany(targetEntity="EntityB", mappedBy="entityA", cascade={"detach"})
*/
private $entityBs;
}

实体B

class EntityB {
/**
* @ORMManyToOne(targetEntity="EntityA", inversedBy="entityB")
*/
private $entityA;
}

试试下面:

/**
* @ORMOneToMany(targetEntity="EntityB", mappedBy="entityA", cascade={"remove"})
*/
protected $entityBs;

/**
* @ORMManyToOne(targetEntity="EntityA", inversedBy="entityB")
* @ORMJoinColumn(name="entityA_id", referencedColumnName="entityB_id", nullable=true, onDelete="SET NULL")
*/
protected $entityA;

最新更新