如果您看到我之前的问题,这与它有关,但是一个新问题。所以我有一个实体,我有一个与此相关的监听器。在我的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函数中获取刷新的实体?
答案 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" }