[英]Doctrine delete from QueryBuidler with cascade
我通过ManyToOne关系链接了两个实体。 我们称它们为“ Parent
和Child
; 一个家长可以有多个孩子。
我在关系上定义了一个cascade={"persist", "remove"}
。 当我使用$em->remove($parent);
它似乎可以工作$em->remove($parent);
方法。
但事实是,我必须一次搬走很多父母(例如超过3000名)。 为了进行这种批量删除,Doctrine建议直接从QueryBuidler中使用delete
方法:
#ParentRepository
$qb = $this->createQueryBuilder('p')
->delete();
$qb->getQUery()->execute();
但是,当我尝试这样做时,出现以下错误: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails [...]
似乎在使用delete()时未遵循remove级联。
有什么帮助吗?
尝试在实体Child
的注释中添加选项onDelete="SET NULL"
。 例:
class Parent {
/**
*@ORM\OneToMany(targetEntity="Child", mappedBy="parent")
*/
protected $childs;
}
class Child {
/**
* @ORM\ManyToOne(targetEntity="Parent", inversedBy="childs")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL")
*/
protected $parent;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.