我有一個Person
是多到一用一Family
。該系統同時接納多行數據與多個人,這些數據可能屬於同一家庭,也可能不屬於同一家族。我事先沒有關於家庭的信息。在哪裏可以在EntityRepository可以訪問的Zend中放置預刷新的實體狀態數據?
當我處理Person
進入系統時,我檢查是否需要先將它的Family
添加到數據庫中。我很自然地問,從FamilyRepository
,但即使我已經創建並堅持同Family
,該FamilyRepository
仍然不知道這一點,因爲它只能在flush()
寫入到數據庫中。
的解決辦法是暫時新建Family
的PrePersist
過程中參考地方添加,並從那個地方,以及從數據庫中FamilyRepository
檢查。
但是在哪裏應該暫時保留但尚未刷新的實體引用go,以便我可以從實體的存儲庫中訪問它?
替代方案,我不喜歡:
,做的代碼添加(
PersonService->insertPersons()
)當然可以跟蹤堅持的實體,但是這似乎是一個非最佳的解決方案,因爲它是不是一個通用的解決方案,代碼將不得不放在添加數據的每個地方。我可以沖水每次加入後,但我寧願不刷新,直到所有的數據已被處理。
我could也通過
$entityManager->getUnitOfWork()->getScheduledEntityInsertions()
循環,並從那裏找到條目,但這似乎更像是一種實際解決方案的破解。
你不妨來看看這個問題:http://stackoverflow.com/questions/7877987/read-objects-persisted-but-not-yet-flushed-with-doctrine – netiul
@netiul感謝您的相關鏈接。儘管如此,我不認爲這些答案對我的問題有解決方案。我想我可以循環訪問'getScheduledEntityInsertions()',但這看起來更像是一種破解 - 我編輯了這個問題來包含這個。 PatrikAkerstrand的答案是有道理的,但它需要相當大的重構來爲所有實體使用自定義引用對象(此外,實體管理器應該做的事情並不是那麼令人興奮)。 –