Как удалить родителя без удаления детей в ассоциации OneToMany: Symfony 5.0.5 - PullRequest
0 голосов
/ 24 марта 2020

Итак, у меня есть сущность User и сущность Department:

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

и

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

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

Существует исключение ForeignKeyConstraintViolationException для объекта Doctrine, связанного с «Отделом». Решение: отключите действие «delete» для этого объекта или настройте атрибут «cascade = {« remove »}» для связанного свойства в объекте Doctrine. Полное исключение: возникла исключительная ситуация при выполнении «УДАЛИТЬ ИЗ ОТДЕЛА, ГДЕ id =?» с параметрами [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;
    }

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

1 Ответ

0 голосов
/ 24 марта 2020

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

easy_admin.pre_remove

, а не:

easy_admin.pre_delete

...