Как уловить изменения в очищенной PersistentCollection?

В настоящее время я работаю над очень абстрактно написанным подписчиком, который должен улавливать и обрабатывать все виды изменений в любом заданном документе.

Пытаясь это сделать, я столкнулся с краем, с которым я не знаю, как справиться:

1) Мой документ содержит коллекцию вложенных документов embedMany. 2) Я звоню $document->collection->clear() 3) Затем я сбрасываю

Как я могу уловить изменения свойства коллекции?

Мой подписчик в настоящее время реагирует на событие onFlush доктрины. До сих пор я пытался следовать (все безуспешно):

  • Перебор запланированных вставок документов
  • Итерация по ScheduledDocumentUpserts
  • Итерация по ScheduledDocumentUpdates
  • Итерация по полной IdentityMap() и вызов $unitOfWork->getScheduledCollections($document) для каждого документа и попытка найти там изменение

Кажется, я не могу найти документ или его коллекцию ни в одном из этих случаев. Однако я твердо убежден, что эта доктрина должна сохранять ссылку на коллекцию, если она планирует очистить ее от всего содержимого во время фактической фиксации базы данных.

Я был бы рад любой помощи или намекам на работоспособное решение.


person Jan    schedule 06.02.2017    source источник


Ответы (1)


Я получил довольно подробный ответ на доске вопросов github doctrine/mongo-odm .

TL;DR:

Однако, если вам нужно знать элементы, которые присутствовали в коллекции перед ее очисткой, вам не повезло.

В итоге:

Если коллекция еще не инициализирована (что я должен был предположить, учитывая, что я хотел, чтобы мой подписчик работал при любых обстоятельствах), вся коллекция будет просто удалена без каких-либо сведений о том, какие элементы будут удалены в процессе. Поскольку коллекция не будет инициализирована перед удалением, это делается для поддержания производительности и уменьшения объема памяти.

Наиболее целесообразным подходом является использование пользовательского класса коллекции для коллекции встроенных документов. Затем этот класс может обрабатывать случай очистки ожидаемым образом.

person Jan    schedule 07.02.2017