Удаление доктрины из QueryBuidler с помощью каскада

Я получил две сущности, связанные отношением 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 () не происходит каскад удаления.

Любая помощь по этому поводу?

0

Решение

Попробуйте добавить опцию 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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]