Прослушиватель событий Doctrine и фильтр с мягким удалением

У меня есть ответы сущностей, и я использую для них фильтр softdeleted, и когда я удаляю сущность в каком-то действии, все нормально, я удалил в datetime, но когда я пытаюсь удалить эту сущность в OnFlushEvent, моя сущность исчезла из БД, почему?

 public function onFlush(OnFlushEventArgs $args)
{
    $em = $args->getEntityManager();
    $uow = $em->getUnitOfWork();
    $em->getFilters()->enable('softdeleteable');
    foreach ($uow->getScheduledEntityUpdates() as $entity) {
        if ($entity instanceof Questions) {
            $existAnswers = $this->container->get('app.repository.question_answers')
                ->findOneBy(['questions' => $entity]);
                        $em->remove($existAnswers);                                                          
        }
    }
}

юридическое лицо

 * @Gedmo\SoftDeleteable(fieldName = "deletedAt")
 */
class QuestionAnswers

служба конфигурации

    app.doctrine_listener:
    class: AppBundle\Listener\DoctrineListener
    calls:
        - [setContainer, ['@service_container']]
    tags:
        - { name: doctrine.event_subscriber, connection: default }

Я проверил, этот фильтр включен, я пытаюсь включить принудительно, но ничего не помогло

Не могли бы вы добавить определение вашей службы прослушивания?

DrKey 17.03.2018 16:28

конечно, обновленный вопрос

shuba.ivan 17.03.2018 16:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
3
2
190
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Думаю, проблема может быть связана с приоритетом подписчиков.

На самом деле кажется, что также SoftDeleteableListener реализует подписчика, который собирает объекты для мягкого удаления, используя событие onFlush(), как мы можем видеть здесь. Поэтому, если ваше событие запускается после события, которое можно удалить, ваши сущности обычно удаляются из Doctrine.

Чтобы избежать этого, я бы установил priotity на вашем подписчике, чтобы запускать ваши события раньше, чем события SoftDeleteableListener.

app.doctrine_listener:
    class: AppBundle\Listener\DoctrineListener
    calls:
        - [setContainer, ['@service_container']]
    tags:
        - { name: doctrine.event_subscriber, connection: default, priority: -256 }

Другие вопросы по теме