Я получил две сущности, связанные отношением ManyToOne.
Давайте назовем их Parent
а также Child
; Родитель может иметь несколько детей.
Я определил 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;
}
Других решений пока нет …