我的实体“ A”具有以下属性:
manyToOne:
b:
targetEntity: App\Entity\B
joinColumn:
name: b_id
referencedColumnName: id
当立即删除实体“ B”时,如何更新实体“ A”的值?
例如:
$a = new A();
$b = $bRepository->find(1);
$a->setB($b);
$em->persist($a);
$em->flush();
// table a: table b:
// +----+------+ +----+
// | id | b_id | | id |
// +----+------+ +----+
// | 1 | 1 | | 1 |
// +----+------+ +----+
$em->remove($b);
$em->flush();
// table a: table b:
// +----+------+ +----+
// | id | b_id | | id |
// +----+------+ +----+
// | 1 | NULL |
// +----+------+
我可以使用MySQL触发器来做到这一点,但是也许有一些表或原则的配置可以不使用触发器来做到这一点?
主要问题是我无法修改实体“ B”或使用删除了“ B”上的$a->setB(null); $em->persist($a);
来更新实体“ A”,因为它在共享包中并在多个项目中使用
答案 0 :(得分:0)
找到了我之前没有注意到的解决方案:MySQL "ON DELETE" referential action的值为“ SET NULL”。参见小提琴:http://sqlfiddle.com/#!9/49e79b/1
ALTER TABLE a ADD FOREIGN KEY (b_id) REFERENCES b (id) ON DELETE SET NULL ON UPDATE CASCADE;
manyToOne:
b:
targetEntity: App\Entity\B
joinColumn:
name: b_id
referencedColumnName: id
onDelete: SET NULL