Posted on

CakePHPのqueryのキャッシュでハマる

モデルのquery関数を使ってループをまわしながら最大noをとってくる処理でハマりました・・・
query関数って$sql同じだった場合勝手にキャッシュを使って前回と同じ値を返すんですね。
通常はこれを回避する為に

$this->query($sql, false);

とすることで毎回最新データを取ってきてくれます。
デフォルトでキャッシュが邪魔だったので、app_model.phpで

function query() {
$params = func_get_args();
if (empty($params[1])) {
$params[1] = false;
} else {
if (is_array($params[1]) && empty($params[2])) {
$params[2] = false;
}
}
$db =& ConnectionManager::getDataSource($this->useDbConfig);
return call_user_func_array(array(&$db, 'query'), $params);
}

query関数をオーバーライドしました。
バージョンは1.2.6です。