2016-12-04 8 views
0

Незначительно новое в MongoDB и Doctrine. В настоящее время я создаю модельную систему для своих фреймворков и пытаюсь реализовать события.Изменение другого документа в Doctrine ODM PreUpdate event

Идея такова: когда какая-то модель обновляется, необходимо создать/обновить нового пользователя (также модель). Я делаю это все в событии PreUpdate, чтобы я мог поймать сделанные изменения (проверьте, был ли изменен адрес электронной почты на модели).

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

Любые идеи о том, каким образом я должен это сделать? Попробовал recomputeSingleDocumentChangeSet на единицу работы для пользователя, но это ничего не спасает.

ответ

0

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

Это именно то, что вы должны сделать (после изменения поля пользователя)

$user->setSomething(true); 
$uow->recomputeSingleDocumentChangeSet(/* ... */); 

и ничего, особенно не использовать flush, как вы внутри flush уже. recomputeSingleDocumentChangeSet делает изменения в истории Doctrine, которые позже будут включены в запрос обновления документа.

Создание и сохранение новой модели в этом случае работает как шарм

Однако это звучит странно, как новые объекты сохранялись на момент preUpdate события не должны достигнуть базы данных (если вы не оформили еще flush которые могут иметь нежелательные побочные эффекты в этот момент), поскольку вставки обрабатываются перед обновлениями.

+0

Отмечая это как ответ из-за хорошего объяснения. К сожалению, это не помогло в моем случае, и я решил это совершенно по-другому. Но эй, технологии, не так ли? :-) –