2016-12-04 45 views
0

在MongoDB和Doctrine中都是相當新穎的。我目前正在爲我的框架建立一個模型系統,並試圖實現這些事件。在Doctrine ODM PreUpdate事件中更改另一個文檔

想法是這樣的:當某個模型得到更新時,應該創建/更新一個新用戶(也是一個模型)。我在PreUpdate事件中全部這樣做,這樣我就可以捕獲所做的更改(檢查模型上的電子郵件地址是否已更改)。

在此事件中創建並保留一個新模型就像一個魅力,但是當我嘗試更新用戶時,我無法保存數據。我嘗試了沖洗,但是這會導致無限循環(我可以理解爲什麼,因爲他試圖再次刷新同一文檔)。

任何想法,我應該怎麼做到這一點?嘗試爲用戶的工作單元重新計算單一文檔更改集,但這似乎不能保存任何內容。

回答

0

在用戶的工作單元上嘗試了recomputeSingleDocumentChangeSet,但這似乎並沒有保存任何東西。

這正是你應該做的(修改用戶後場)

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

,沒有別的,尤其不要使用flush,你在裏面flush了。 recomputeSingleDocumentChangeSet使Doctrine重新計算更改將稍後包含在文檔的更新查詢中。

創建並在此事件中堅持一種新的模式就像一個魅力

新對象持久化在preUpdate活動的時間應不會達到數據庫(除非您已經發布了另一flush然而,這聽起來很奇怪因爲在更新之前處理插入操作,所以此時可能會產生不必要的副作用)。

+0

由於很好的解釋,將其標記爲答案。不幸的是,這對我的情況沒有幫助,我用完全不同的方式解決了這個問題。但是,嘿,技術,對吧? :-) –

相關問題