考慮Symfony的應用程序下面的步驟:獲取有關學說postFlush事件刷新實體
- 註冊聽衆爲傾倒的工作單位
getScheduledEntityInsertions()
結果Doctrine`spostFlush
事件。 - 創建SomeEntity類的實例。
- 呼叫實體Manager`s
persist
和flush
方法與先前創建的實體實例 postFlush
監聽器發射getScheduledEntityInsertions()
調用任何回報
預期的行爲是在最後一步我看到插入的實體的列表,但如果你看看UoF的executeInserts()
方法,unset($this->entityInsertions[$oid])
要求每個實體,所以nothig從getScheduledEntityInsertions()
呼叫返回。
蔭發現拒絕補丁的話:https://github.com/doctrine/doctrine2/pull/5674和Ocramius建議使用「onFlush」事件收集所有需要的數據,併發射自定義事件:https://groups.google.com/forum/#!topic/doctrine-user/GLJEx0p5kL4
但是,我不明白,它是如何工作的:如果我爲myCustomEvent
註冊自定義偵聽器,並從onFlush
中觸發它,並帶有未插入實體列表 - 它將在實體保存到數據庫之前執行(postFlush
已觸發),並且無法從此偵聽器的數據庫中接收。
可能的解決方案之一是對onFlush和postFlush事件使用一個Listener類,在onFlush中使用必要的數據填充內部屬性,在postFlush中讀取數據屬性。但是這個解決方案有一定的侷限性:兩個監聽器方法必須被定義爲相同的類;監聽器不是線程安全的。 – Alex