簡體   English   中英

原則1.2:禁用緩存

[英]Doctrine 1.2: Disabling caching

問題類似,我在教義如何緩存/水合查詢結果之間的關系時遇到了一些問題。

現在,我知道可以通過調用refresh / refreshRelated來解決此問題,但是有沒有一種方法可以禁用表的臨時水化緩存? 特別是在select中使用聯接時,示例代碼將變為:

$result2 = Doctrine_Query::create()
           ->leftJoin('s.School sc')
           ->from('Student s')
           ->execute();

您確實希望Doctrine使用您聯接中的數據,而不是使用先前選擇中緩存的水合結果。

有辦法嗎?

提前致謝!

我認為默認情況下,它應該與查詢結果保持一致,除非您已更改Doctrine_Core::ATTR_HYDRATE_OVERWRITE 您可以使用以下方法檢查值:

$doctrineManager = Doctrine_Manager::getInstance();
$val = $doctrineManager->getAttribute(Doctrine::ATTR_HYDRATE_OVERWRITE); 

當您調用refresh()時,它將強制將該值設置為true,然后再次執行查詢,然后恢復設置。 如果您碰巧是假的,則可以使用$doctrineManager->setAttribute更改

我認為您的帶有refreshRelated的解決方案是可以的,但是如果您不需要緩存中的這些項目。 你可以設定

Doctrine_Manager::connection()->setAttribute(Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true );

這樣,Doctrine將在每個查詢結束時自動調用free(),因此它不會緩存其結果,並且還會使內存占用量降低一些。

暫無
暫無

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

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