Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

CakePHPのqueryのキャッシュについて

こーゆー単体テストを書いていた。

  1. 明細行を集計
  2. 集計結果SQLを発行して確認
  3. 集計されない結果を返すようupdate
  4. 集計結果SQLを発行して確認

2と4で発行されるSQLは同じ。で、3で発行したsqlの結果はfindすると反映されているのに、4でSQLを実行すると更新前の結果が返ってきた。

ん。。。。何これキャッシュされてますかこれは・・・?

公式ドキュメントを見ると、いかにもな記述が。

query() does not honor $Model->cacheQueries as its functionality is inherently disjoint from that of the calling model. To avoid caching calls to query, supply a second argument of false, ie: query($query, $cachequeries = false)

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-query

$Model->cacheQueriesの値は関係ないです、queryは独自で頑張ってるんですみたいな記述があるし、SQLの実行結果をキャッシュしたくないならqueryの第2引数にfalseを明示的に入れろだって。$this->query('sql',false);ってことか。

いやー、これ結構気をつけないとヤバいっしょ。