【问题标题】:Get flushed entities on Doctrine postFlush event在 Doctrine postFlush 事件中获取刷新的实体
【发布时间】:2017-02-24 09:25:43
【问题描述】:

考虑 Symfony 应用程序的下一步:

  1. 为 Doctrine 的 postFlush 事件注册侦听器,该事件转储工作单元 getScheduledEntityInsertions() 的结果。
  2. 创建 SomeEntity 类的实例。
  3. 使用之前创建的实体实例调用实体管理器的 persistflush 方法
  4. postFlush 监听器被解雇
  5. 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 触发它并列出未插入的实体 - 它将在实体实际保存到数据库之前执行(@ 987654334@ 已触发)并且无法从此侦听器中的数据库接收。

【问题讨论】:

    标签: php symfony doctrine-orm doctrine


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 2014-12-13
      相关资源
      最近更新 更多