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

0

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

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

Теги:
doctrine2
cascade

1 ответ

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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню