我有两个由ManyToOne关系链接的实体。
我们称他们为Parent
和Child
;父母可以有多个孩子。
我在关系上定义了cascade={"persist", "remove"}
。当我使用$em->remove($parent);
方法时,它似乎有效。
但事实是我必须一次删除很多父母(例如超过3,000)。为了进行批量删除,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()时似乎没有遵循删除级联。
对此有何帮助?
答案 0 :(得分:1)
尝试在实体onDelete="SET NULL"
的注释中添加选项Child
。例如:
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;
}