繁体   English   中英

使用级联从QueryBuidler中删除主义

[英]Doctrine delete from QueryBuidler with cascade

我通过ManyToOne关系链接了两个实体。 我们称它们为“ ParentChild 一个家长可以有多个孩子。

我在关系上定义了一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM