【问题标题】:How to catch changes to a cleared PersistentCollection?如何捕获对已清除 PersistentCollection 的更改?
【发布时间】:2017-02-06 15:27:29
【问题描述】:

我目前正在编写一个非常抽象的订阅者,它应该捕获并处理任何给定文档上的所有类型的更改。

在尝试时,我遇到了一个我不知道如何处理的边缘:

1) 我的文档保留了一个 embedMany 子文档集合。 2) 我打电话给$document->collection->clear() 3)然后我冲洗

如何捕捉对集合属性的更改?

我的订阅者目前对学说的 onFlush 事件作出反应。到目前为止,我已尝试关注(均未成功):

  • 迭代 ScheduledDocumentInsertions
  • 迭代 ScheduledDocumentUpserts
  • 迭代 ScheduledDocumentUpdates
  • 遍历完整的 IdentityMap() 并为每个文档调用 $unitOfWork->getScheduledCollections($document) 并尝试在那里找到更改

在任何这些情况下,我似乎都无法找到该文档或其集合。不过,我强烈认为,如果该原则计划在实际数据库提交期间清除所有内容,则应该保留对集合的引用。

对于可行的解决方案的任何帮助或提示,我将不胜感激。

【问题讨论】:

    标签: php mongodb symfony doctrine doctrine-odm


    【解决方案1】:

    我收到了一个漂亮的extensive answer in the doctrine/mongo-odm github issue board

    TL;DR:

    但是,如果您需要在清除之前知道集合中存在的元素,那么您就不走运了。

    总结:

    如果集合还没有被初始化(我不得不假设我希望我的订阅者在所有情况下都可以工作)整个集合将被删除,而不知道在这个过程中会删除哪些元素。由于集合在被删除之前不会被初始化 - 这样做是为了保持性能并减少内存占用。

    最可行的方法似乎是use a custom collection class 用于嵌入文档的集合。然后这个类可以按预期的方式处理明确的情况。

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 2013-03-05
      相关资源
      最近更新 更多