gpt4 book ai didi

php - 在 Doctrine postFlush 事件中获取刷新的实体

转载 作者:可可西里 更新时间:2023-11-01 01:14:38 24 4
gpt4 key购买 nike

考虑 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 中使用未插入的实体列表触发它 - 它会在实体实际保存到数据库(postFlush 触发)之前执行,并且无法在此监听器中从数据库接收。

最佳答案

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

关于php - 在 Doctrine postFlush 事件中获取刷新的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com