2016-10-03 18 views
0

我有一個腳本,使用原則從數據庫中提取數據。有時它需要爲同一實體獲取數據,但是它第二次使用標識映射,因此可能與數據庫不同步(另一個進程可以修改數據庫中的實體)。我們嘗試的一種解決方案是在運行DQL查詢之前設置查詢提示Query::HINT_REFRESH。然而,我們也想用它調用簡單的findBy(..),但這似乎不起作用?我們還希望能夠在每個進程中對其進行全局設置,以便在該上下文中運行的所有Doctrine SELECT查詢將實際從數據庫中提取實體。我們試圖設置$em->getConfiguration()->setDefaultQueryHint(Query::HINT_REFRESH, true);,但又似乎不起作用?強制原則總是刷新

+0

幾種可能的方法,但是如果數據庫在查詢後發生了變化,您希望發生什麼?假設你需要對這些數據做些什麼,但是在查詢和你使用它的任何事情之間它可能會失效。 – Cerad

+0

如果數據在實際處理過程中發生了變化,那麼它就可以。當我找到我希望得到存儲在數據庫中的實際狀態。 – roinir

+0

這是一種長時間運行的過程嗎?不清楚爲什麼要在查詢之間進行更改,但查詢後數據更改沒問題。在每個查詢之前,可能需要一個簡單的$ entityManager-> clear()。 – Cerad

回答

0

Doctrine explicitly warns you它不意味着沒有緩存使用。

但是,如果要忽略這一點,那麼Cerad的評論(在in this answer中也提到)聽起來沒錯。如果你想在每個查詢中都這麼做,雖然你可能會考慮掛鉤doctrine event,但不幸的是,preLoad沒有任何事件,只有postLoad,但如果你真的不關心性能,你可以創建一個postLoad監聽器,它首先獲取類和實體的ID,在實體管理器上調用clear,最後重新加載它。聽起來對我來說是非常錯誤的,但我洗了手:-)