如何捕获已清除的 PersistentCollection 的更改?

How to catch changes to a cleared PersistentCollection?

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

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

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

如何捕捉集合的变化 属性?

我的订户目前对 doctrine 的 onFlush 事件有反应。到目前为止,我已经尝试过以下(都没有成功):

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

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

我收到了一个漂亮的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 然后可以按预期方式处理明确的情况。