Symfony2 / Doctrine - postFlush

时间:2015-02-18 17:13:23

标签: symfony doctrine-orm

如果您看到我之前的问题,这与它有关,但是一个新问题。所以我有一个实体,我有一个与此相关的监听器。在我的createAction中,我创建了我的对象,然后将其持久化 - 刷新到我的数据库。在我的听众中,我设置了一个postFlush函数

public function postFlush(PostFlushEventArgs $args)
{
    $em = $args->getEntityManager();

    foreach ($em->getUnitOfWork()->getScheduledEntityDeletions() as $entity) {
        if ($entity instanceof AvailabilityAlert) {
            var_dump("TEST");
            $this->api_service->addFlightsAction($entity);
        }
    }
}

我在这个函数中尝试做的是获取刚刚刷新的实体。我已经尝试了getUnitsOfWork的所有不同操作,例如getScheduledEntityDeletions但是对于它们都没有,我可以进入var_dump发生的地方。

我如何在这个postFlush函数中获取刷新的实体?

2 个答案:

答案 0 :(得分:2)

根据此处的Doctrine2文档:http://doctrine-orm.readthedocs.org/en/latest/reference/events.html,您无法在PostFlush事件上调用已刷新的实体。

但是,您可以拆分逻辑:使用OnFlush事件获取这些实体,然后如果刷新成功则将其传递给PostFlush

答案 1 :(得分:1)

要仅保留到数据库实体,您不需要postFlush,而是postPersist

public function postPersist(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
}

不要忘记在服务中添加下一个标记:

{ name: "doctrine.event_listener",  event: "postPersist" }