繁体   English   中英

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

[英]Get flushed entities on Doctrine postFlush event

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

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

预期的行为是,在最后一步,我看到了插入实体的列表,但是如果你看一下UoF的executeInserts()方法,则为每个实体调用unset($this->entityInsertions[$oid]) ,以便从getScheduledEntityInsertions()返回nothig getScheduledEntityInsertions()打电话。

Iam发现该案件拒绝补丁: https//github.com/doctrine/doctrine2/pull/5674和Ocramius建议使用“onFlush”事件来收集所有需要的数据并解雇自定义事件: https ://groups.google 。 COM /论坛/#!话题/学说用户/ GLJEx0p5kL4

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM