簡體   English   中英

在Doctrine postFlush事件上獲取刷新的實體

[英]Get flushed entities on Doctrine postFlush event

考慮Symfony應用程序中的后續步驟:

  1. 注冊Doctrine的postFlush事件的監聽器, postFlush事件轉儲工作單元的getScheduledEntityInsertions()的結果。
  2. 創建SomeEntity類的實例。
  3. 使用先前創建的實體實例調用實體管理器的persistflush方法
  4. postFlush監聽器被解雇了
  5. getScheduledEntityInsertions()調用什么都不返回

預期的行為是,在最后一步,我看到了插入實體的列表,但是如果你看一下UoF的executeInserts()方法,則為每個實體調用unset($this->entityInsertions[$oid]) ,以便從getScheduledEntityInsertions()返回nothig getScheduledEntityInsertions()打電話。

Iam發現該案件拒絕補丁: https//github.com/doctrine/doctrine2/pull/5674和Ocramius建議使用“onFlush”事件來收集所有需要的數據並解雇自定義事件: https ://groups.google 。 COM /論壇/#!話題/學說用戶/ GLJEx0p5kL4

但是,我不明白,它是如何完成的:如果我為myCustomEvent注冊自定義偵聽器並從onFlush使用未插入實體列表觸發它 - 它將在實體實際保存到數據庫之前執行( postFlush觸發)並且無法從此偵聽器中的數據庫。

一種可能的解決方案是在onFlushpostFlush事件中使用一個Listener類,在onFlush使用必要的數據填充內部屬性,在postFlush從屬性中讀取數據。 但是這個解決方案有局限性:兩個偵聽器方法都必須定義為相同的類; 監聽器不是線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM