Как удалить родителя без удаления потомков в ассоциации OneToMany - это Symfony 5.0.5

Итак, у меня есть сущность пользователя и сущность отдела:

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="department")
     */
    private $employees;

а также

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Department", inversedBy="employees")
     */
    private $department;

И я использую EasyAdmin Bundle. Я хочу иметь возможность удалить отдел, в котором есть сотрудники, но не удаляя их. но я всегда получаю эту ошибку:

Существует исключение ForeignKeyConstraintViolationException для объекта Doctrine, связанного с "Department". Решение: отключите действие «удалить» для этой сущности или настройте атрибут «cascade = {" remove "}» для связанного свойства в сущности Doctrine. Полное исключение: исключение произошло при выполнении 'УДАЛИТЬ ИЗ отдела WHERE id =?' с params [4]:

Я попытался переопределить событие easy_admin.pre_delete, добавив эту функцию, чтобы удалить все ассоциации перед удалением моей сущности:

public static function getSubscribedEvents()
    {
        return array(
            'easy_admin.pre_delete' => array('deleteAssociations'),
        );
    }
public function deleteAssociations(GenericEvent $event) {

        $entity = $event->getSubject();

        if (!($entity instanceof Department)) {
            return;
        }

        foreach($entity->getEmployees() as $employee) {
            $entity->removeEmployee($employee);
        }
        $event['entity'] = $entity;
    }

но он по-прежнему показывает ту же ошибку. если кто-то знает почему, спасибо за любой ответ


person Chedi Athmni    schedule 24.03.2020    source источник


Ответы (1)


Я понял: я должен использовать

easy_admin.pre_remove

и не:

easy_admin.pre_delete

person Chedi Athmni    schedule 24.03.2020