如何捕获已清除的 PersistentCollection 的更改?
How to catch changes to a cleared PersistentCollection?
我目前正在编写一个非常抽象的订阅者,它应该捕获并处理任何给定文档上的各种更改。
在尝试时我遇到了一个我不知道如何处理的边缘:
1) 我的文档保留了一个 embedMany 子文档集合。
2) 我打电话给 $document->collection->clear()
3)然后我冲洗
如何捕捉集合的变化 属性?
我的订户目前对 doctrine 的 onFlush 事件有反应。到目前为止,我已经尝试过以下(都没有成功):
- 遍历 ScheduledDocumentInsertions
- 遍历 ScheduledDocumentUpserts
- 遍历 ScheduledDocumentUpdates
- 迭代完整的 IdentityMap() 并为每个文档调用
$unitOfWork->getScheduledCollections($document)
并尝试在其中找到更改
在任何一种情况下,我似乎都找不到文档或其集合。不过,我强烈认为,如果计划在实际数据库提交期间清除集合中的所有内容,该学说应该保留对集合的引用。
对于可行解决方案的任何帮助或提示,我将不胜感激。
我收到了一个漂亮的extensive answer in the doctrine/mongo-odm github issue board。
长话短说:
However, if you need to know the elements that were present in the collection before clearing it, you're out of luck.
总结:
如果集合尚未初始化(考虑到我希望我的订户在所有情况下都可以工作,我不得不假设)整个集合将被删除,而不知道哪些元素将被删除过程。由于集合在删除之前不会被初始化 - 这样做是为了保持性能并减少内存占用。
最可行的方法似乎是use a custom collection class用于收集嵌入式文档。 class 然后可以按预期方式处理明确的情况。
我目前正在编写一个非常抽象的订阅者,它应该捕获并处理任何给定文档上的各种更改。
在尝试时我遇到了一个我不知道如何处理的边缘:
1) 我的文档保留了一个 embedMany 子文档集合。
2) 我打电话给 $document->collection->clear()
3)然后我冲洗
如何捕捉集合的变化 属性?
我的订户目前对 doctrine 的 onFlush 事件有反应。到目前为止,我已经尝试过以下(都没有成功):
- 遍历 ScheduledDocumentInsertions
- 遍历 ScheduledDocumentUpserts
- 遍历 ScheduledDocumentUpdates
- 迭代完整的 IdentityMap() 并为每个文档调用
$unitOfWork->getScheduledCollections($document)
并尝试在其中找到更改
在任何一种情况下,我似乎都找不到文档或其集合。不过,我强烈认为,如果计划在实际数据库提交期间清除集合中的所有内容,该学说应该保留对集合的引用。
对于可行解决方案的任何帮助或提示,我将不胜感激。
我收到了一个漂亮的extensive answer in the doctrine/mongo-odm github issue board。
长话短说:
However, if you need to know the elements that were present in the collection before clearing it, you're out of luck.
总结:
如果集合尚未初始化(考虑到我希望我的订户在所有情况下都可以工作,我不得不假设)整个集合将被删除,而不知道哪些元素将被删除过程。由于集合在删除之前不会被初始化 - 这样做是为了保持性能并减少内存占用。
最可行的方法似乎是use a custom collection class用于收集嵌入式文档。 class 然后可以按预期方式处理明确的情况。