Я получил два объекта, связанных отношением ManyToOne. Позвольте назвать их " Parent
и Child
; Родитель может иметь несколько Childs.
Я определил cascade={"persist", "remove"}
в отношении. Кажется, что работает, когда я использую $em->remove($parent);
метод.
Но факт в том, что я должен удалить много родителей за один раз (например, более 3000). Чтобы сделать такое массовое удаление, Doctrine рекомендует использовать метод delete
непосредственно из QueryBuidler:
#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().
Любая помощь по этому поводу?
Попробуйте добавить параметр 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;
}