需要关于postPersist的说明并刷新数据

时间:2019-01-04 15:30:47

标签: symfony doctrine

我遇到了一个未正确刷新的实体的问题。

在一项服务中,我设置了一些值。在将它们刷新到服务中之前,我调用了另一个服务,并且看到有一个侦听器链接在一起。 在此侦听器中,女巫中有一个postPersist方法,称为“ $ entityManager-> flush();”。

这是我问题的根源。

我发现了这篇文章:Doctrine inserting in postPersist event

因此,我删除了在postPersist中完成的冲洗。

但是我不理解方法postFlush的需要。

就我而言,即使我没有此方法,也会刷新数据。在没有此事件的情况下,如何正确刷新侦听器中设置的属性?

如果我查看其他入口点,会发现需要声明postFlush事件,并且看到需要此方法。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

否,您不需要在postPersist事件中刷新,因为它将在Persist之后很快完成。您无需使用列表的所有功能,也无需声明它们。

ps .:仅当您需要在持久/刷新之前获取/设置数据时。您将需要计算更改,然后将其添加到“耦合”操作中(例如prePersist和postPersist,preUpdate和postUpdate)。 文档说:

  

对传递的实体的字段所做的更改无法被   刷新操作,请使用传递给   事件以修改原始字段值。

  

getEntityChangeSet()获取变更集数组的副本。更改为   此返回的数组不会影响更新。

PostFlush

postFlush在刷新操作结束时进行。根据文档,此事件不是生命周期回调。注册后,您甚至可以使用它来设置某些内容,甚至发送通知,而使用postFlush则很明显,您无需担心lifeCycle事件。

  

postFlush-postFlush事件在刷新结束时发生   操作。此事件不是生命周期回调。

对于文档中的postPersist

  

postPersist-在实体之后,实体发生postPersist事件   实体已设置为持久性。它会在数据库之后被调用   插入操作。生成的主键值可在   postPersist事件。

如果需要在刷新之前在这里可以有ID。

您可以在此处查看有关LifeCycleEvents的文档: https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#lifecycle-events