我有实体答案,我对它们使用 softdeleted
过滤器,当我在某些操作中删除实体时一切正常,我已在日期时间删除,但是当我尝试在 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 }
我检查过,此过滤器已启用,我尝试强制启用但没有帮助
最佳答案
我认为该问题可能与订阅者优先级有关。
事实上,SoftDeleteableListener
似乎也实现了一个订阅者,它使用 onFlush()
事件收集实体以进行软删除,如我们所见 here 。因此,如果您的事件在软删除事件之后触发,您的实体通常会从 Doctrine 中删除。
为了避免这种情况,我会在您的订阅者上设置 priority
,以便在 SoftDeleteableListener
事件之前触发您的事件
app.doctrine_listener:
class: AppBundle\Listener\DoctrineListener
calls:
- [setContainer, ['@service_container']]
tags:
- { name: doctrine.event_subscriber, connection: default, priority: -256 }
关于symfony - Doctrine 事件监听器和软删除过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49337895/