2017-02-06 2 views
0

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

При попытке я обнаружил край, что я не знаю, как обращаться:

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

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

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

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

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

Я с удовольствием пойму любую помощь или подсказки по поводу приемлемого решения.

ответ

0

Я получил довольно extensive answer in the doctrine/mongo-odm github issue board.

TL; DR:

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

В итоге:

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

Наиболее приемлемый подход, по-видимому, относится к use a custom collection class для сбора встроенных документов. Этот класс может затем обработать ясный случай ожидаемым образом.

Смежные вопросы