考虑 Symfony 应用程序中的后续步骤:
- 为 Doctrine 的
postFlush
事件注册监听器,该事件转储工作单元的getScheduledEntityInsertions()
结果。 - 创建 SomeEntity 类的实例。
- 使用先前创建的实体实例调用实体管理器的
persist
和flush
方法 postFlush
监听器已触发getScheduledEntityInsertions()
调用不返回任何内容
预期的行为是在最后一步我看到插入实体的列表,但是如果您查看 UoF 的 executeInserts()
方法,unset($this->entityInsertions[$oid ])
调用每个实体,因此 getScheduledEntityInsertions()
调用不会返回任何内容。
我找到了那个案例的拒绝补丁:https://github.com/doctrine/doctrine2/pull/5674 Ocramius 建议使用“onFlush”事件来收集所有需要的数据并触发自定义事件:https://groups.google.com/forum/#!topic/doctrine-user/GLJEx0p5kL4
但是,我不明白如何做到:如果我为 myCustomEvent
注册自定义监听器并从 onFlush
中使用未插入的实体列表触发它 - 它会在实体实际保存到数据库(postFlush
触发)之前执行,并且无法在此监听器中从数据库接收。
最佳答案
一种可能的解决方案是为 onFlush
和 postFlush
事件使用一个 Listener 类,并在 onFlush
中用必要的数据填充内部属性,在 postFlush
中从属性中读取数据。但是这个解决方案有局限性:两个监听器方法必须定义在同一个类中;监听器不是线程安全的。
关于php - 在 Doctrine postFlush 事件中获取刷新的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434980/