2013-10-02 19 views
3

我有發生完全刪除查詢緩存從CakePHP的2.x的

public function test() 
{ 
    $uuid = substr(String::uuid() , 4 , rand(7 , 10)); 
    $name = $uuid; 

    $event = $this->Event->getEvent(array("event_id" => "5240e695-9acc-4e32-9b98-1aecb3d0838")); 
    $event[ "event_name" ] = $name; 

    $this->Event->update($event); 

    debug($this->Event->search(array("event_id" => $event[ "event_id"]))[ 0 ][ "event_name" ]); 

    debug($this->Event->search(array("event_id" => $event[ "event_id"] , "limit" => 1))[ 0 ][ "event_name" ]); 
} 

我給你一個隨機的名字從MySQL(InnoDB的)表event檢索特定事件的後續查詢,指定一個隨機新名稱並將其保存回數據庫。

當我在此代碼中運行最後兩條語句時,結果不相同,請注意,第二個查詢中的最後一個參數只是將LIMIT 1添加到第二個查詢的末尾。 (我沒有使用CakePHP 2.x搜索表的典型方法)。第一個搜索調用的結果將生成上一個請求的前一個結果,而第二個搜索調用將生成event表中的實際當前更新的名稱。

我一直在搜索如何從數據源對象中完全刪除查詢緩存,但無法弄清楚如何。我的數據源對象上使用flushMethodCache()試過了,但它什麼都不做,我試過設置

$cacheQueries = false, $cacheSources = false; 
在AppModel

,但是,這並不無論做任何事情。我試過尋找/App/Config/Core.php並禁用緩存,並將緩存時間設置爲0.這些都不起作用。

+0

是什麼'search'功能嗎?你能發表一些關於它的代碼嗎?爲什麼你不使用CakePHP 2.x搜索tables_的典型方法? – arilia

+0

出於安全原因,我不能發佈框架的內部,但我可以發佈這兩個函數調用執行的兩個查詢字符串。 http://pastebin.com/YTFskNPF 每當第一個查詢被修改,但返回等價的結果時,查詢返回'query'函數中由Event模型調用的PREVIOUS結果,我已經得出結論該查詢正在被緩存。 我不使用CakePHP 2.x典型的CRUD方法,因爲它們並不完全滿足我構建的應用程序的複雜需求,因爲我需要比CakePHP 2.x提供的查詢更多的自定義功能。 – SobiborTreblinka

回答

9

發現了問題:

,而不是調用

$model->query($string);

我需要調用

$model->query($string, false);

+2

[Documentation](http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-query) –