考虑Symfony应用程序中的后续步骤:
postFlush
事件注册侦听器,以转储工作单元getScheduledEntityInsertions()
的结果。persist
和flush
方法
postFlush
听众解雇getScheduledEntityInsertions()
致电没有回复预期的行为是,在最后一步,我看到了插入实体的列表,但是如果你看一下UoF的executeInserts()
方法,unset($this->entityInsertions[$oid])
为每个实体调用,那么nothig从{{1}返回打电话。
Iam发现该案例被拒绝补丁:https://github.com/doctrine/doctrine2/pull/5674和Ocramius建议使用“onFlush”事件来收集所有需要的数据并触发自定义事件:https://groups.google.com/forum/#!topic/doctrine-user/GLJEx0p5kL4
但是,我不明白,它是如何完成的:如果我为getScheduledEntityInsertions()
注册自定义侦听器并从myCustomEvent
使用未插入实体列表触发它 - 它将在实体实际保存之前执行到数据库(onFlush
已激活)并且无法从此侦听器中的数据库接收。
答案 0 :(得分:3)
可能的解决方案之一是为onFlush
和postFlush
事件使用一个Listener类,并在onFlush
使用必要数据填充内部属性,在postFlush
中读取数据属性。但是这个解决方案有局限性:两个侦听器方法都必须定义为相同的类;监听器不是线程安全的。