我目前正在编写一个非常抽象的订阅者,它应该捕获并处理任何给定文档的所有类型的更改。
尝试时我遇到了一个我不知道如何处理的边缘:
1)我的文档保留了一个embedMany子文档集合。
2)我打电话给$document->collection->clear()
3)然后我冲洗
如何捕获对集合属性的更改?
我的订阅者当前对doctrine的onFlush事件作出反应。到目前为止,我已经尝试过(一切都没有成功):
$unitOfWork->getScheduledCollections($document)
并尝试在那里找到更改在任何这种情况下,我似乎无法找到该文档或其集合。我强烈地感觉到,如果该学说计划在实际数据库提交期间清除所有内容,那么该学说应该保留对该集合的引用。
我很乐意感谢任何有用的解决方案的帮助或提示。
答案 0 :(得分:0)
我收到了漂亮的extensive answer in the doctrine/mongo-odm github issue board。
TL; DR:
但是,如果您在清除之前需要知道集合中存在的元素,那么您就不幸了。
总结:
如果集合尚未初始化(我必须假设我希望我的订阅者在所有情况下工作),整个集合将被删除,而不知道在此过程中将丢弃哪些元素。由于集合在被删除之前不会被初始化 - 这样做是为了保持性能并减少内存占用。
对于嵌入式文档的收集,最可行的方法似乎是use a custom collection class。然后,该类可以以预期的方式处理明确的情况。