我有实体答案,我使用softdeleted
过滤器,当我在某个操作中移除实体一切正常时,我已删除了datetime,但是当我尝试在OnFlushEvent
我的实体中删除此实体时从DB走了,为什么?
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 }
我检查过,启用了此过滤器,我尝试强制启用但没有帮助
答案 0 :(得分:1)
我认为这个问题可能与订阅者的优先级有关。
事实上似乎SoftDeleteableListener
实现了一个订阅者,它使用onFlush()
事件收集实体到softdelete,我们可以看到here。因此,如果您的事件在softdeletable之后被触发,那么您的实体通常会从Doctrine中删除。
要避免这种情况,我会在您的订阅者身上设置priotity
,以便在SoftDeleteableListener
之前触发您的活动
app.doctrine_listener:
class: AppBundle\Listener\DoctrineListener
calls:
- [setContainer, ['@service_container']]
tags:
- { name: doctrine.event_subscriber, connection: default, priority: -256 }