在 Doctrine postFlush 事件上获取刷新的实体

Ale*_*lex 5 php doctrine symfony doctrine-orm

考虑 Symfony 应用程序的后续步骤:

  1. 为 DoctrinepostFlush事件注册监听器,该事件转储getScheduledEntityInsertions()工作单元的结果。
  2. 创建 SomeEntity 类的实例。
  3. 使用先前创建的实体实例调用实体管理器persistflush方法
  4. postFlush 听众被解雇
  5. getScheduledEntityInsertions() 调用什么都不返回

预期的行为是在最后一步我看到插入实体的列表,但是如果您查看executeInserts()UoF 的方法,则为unset($this->entityInsertions[$oid])每个实体调用,因此调用不返回任何内容getScheduledEntityInsertions()

Iam 发现该案例的拒绝补丁:https : //github.com/doctrine/doctrine2/pull/5674和 Ocramius 建议使用“onFlush”事件收集所有需要的数据并触发自定义事件:https ://groups.google 。 com/forum/#!topic/doctrine-user/GLJEx0p5kL4

但是,我不明白,它是如何完成的:如果我注册自定义侦听器myCustomEventonFlush从未插入实体的列表中触发它- 它将在实体实际保存到数据库(postFlush触发)之前执行,并且无法从数据库中接收到听众。

Ale*_*lex 5

一种可能的解决方案是为事件使用一个监听器类,onFlush并用必要的数据填充内部属性,从属性读取数据。但是这个解决方案有局限性:两个 listener-methods 必须定义同一个类;侦听器不是线程安全的。postFlushonFlushpostFlush