CakePHPではまったこと 2(findとキャッシュ)

丸数字使うと20が限界であることを思い出したため。これは自分への挑戦です。
20を超えてやるぞと。

モデルから繰り返しfindするとき、キャッシュが効くので要注意。


$hoge = $this->Hoge->findByName('foo');
if (!$hoge) {   // $hoge == false
    $hoge_data = array('Hoge' => array('name' => 'foo'));
    $this->Hoge->save($hoge_data);
    $hoge = $this->Hoge->findByName('foo');  // $hoge == false
}

ってやると、$hogeはいつまでたってもfalse。
2回目のfindでは、1回目のfindでのキャッシュを返すためです。
これを防ぐためには、2回目のfindの前に


$this->Hoge->create();   // リセット

ってやるか、


$this->Hoge->cacheQueries = false;  // キャッシュを無効

ってやるか。

参考:某CakePHPフォーラム

追記:既存データを更新した場合、create()だけじゃキャッシュを見てしまうようだ。新規の場合もひょっとしたら・・・。cacheQueriesをfalseにするのが確実なようです。

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: PHP, フレームワーク パーマリンク

コメントを残す

メールアドレスが公開されることはありません。