経緯
先日、CakePHPで構成されるWebアプリケーションに新たにデータ項目が追加されることになりました。そこでデータベースのテーブルにカラムを新規に追加しました。しかしコントローラーでモデルを参照しても、追加したカラムのデータを一向に読み取ることができず、ソースコードを何度も見返しても原因がわかりませんでした。
キャッシュファイルが原因
CakePHPのキャッシングによって、次回以降の重いクエリなどのリソースの読み込みにかかる時間を短縮できます。公式のドキュメントによると、Cacheクラスを使用することでキャッシュを利用することができ、以下にある組み込みキャッシュエンジンを使用できるそうです。
- FileCache
- ApcCache
- Wincache
- XcacheEngine
- emcacheEngine
- MemcachedEngine
2.3以降ではFileCacheがデフォルトのキャッシュエンジンに設定されており、特定のディレクトリにキャッシュファイルが生成されます。今回のケースでは、app/tmp/cache/modelsに該当のモデルのキャッシュファイルが存在しました。テーブルにカラムを追加した後も、キャッシュファイル内の古い情報を参照し続けたことが原因になります。
ちなみにキャッシュの設定はapp/Config/core.phpで行うことができます。
Cache::config('default', array(
'engine' => 'File',
'duration' => 3600,
'path' => CACHE,
'prefix' => 'cake_'
));
参考
公式ドキュメント:キャッシュ
https://book.cakephp.org/2.0/ja/core-libraries/caching.html