Software Engineer and Web Developer's Diary

1年後の自分に向けて

query 関数で同じ sql を実行するとキャッシュが効いてしまう

例えば、

[code] $data = $this->query('select * from sample');// ここで sample テーブルに対してレコード追加を行う$data = $this->query('select * from sample'); [/code]

上記のような処理をすると、1 度目の query 文で取得したデータと 2 度目の query 文で取得したデータは異なるはずだが、CakePHP の仕様ではキャッシュがデフォルトでオンになっているためレコード追加後のデータは取得できない。

仕方がないので、cake/libs/model/datasources/dbo_source.php を修正する。

[code] 修正前 function query() { $args = func_get_args(); $fields = null; $order = null; $limit = null; $page = null; $recursive = null;

if (count($args) == 1) { return $this->fetchAll($args[0]); 修正後 function query() { $args = func_get_args(); $fields = null; $order = null; $limit = null; $page = null; $recursive = null;

if (count($args) == 1) { return $this->fetchAll($args[0], false); [/code]

追記 この前気づいたけどこの修正は間違い。query() 関数の何個目かの引数に false を渡せばキャッシュされないようになります。