CakePHP

CakePHP テーブル情報の削除

CakePHPではデータベースのテーブル情報をキャッシュしてくれる機能があります。
「app/config/core.php」内の設定で「Configure::write(‘Cache.check’, true);」を
適用していると生成されませんが、「app/tmp/cache/models」に
データベースのテーブル情報がキャッシュとして保存されていきます。

これはテーブル情報をキャッシュすることで、フォームヘルパーなどでも利用される情報でもあり
大変便利な機能ではあります。
しかし気をつける点があり、「app/config/core.php」内の設定で「Configure::write(‘debug’, 0);」の設定を
1以上であれば、テーブルの情報を変更しても問題は無いのですが
0を指定(デバック無し)にしてテーブル情報を変更すると、変更したテーブルのフィールド情報が取得されない現象が起こります。
詳しい内容は割愛させていただきますが、まぁあたりまえな話でもあります。

しかし、ここで問題となるのが作成するアプリケーションの機能で、任意のタイミングにテーブル情報を変更するような
動的テーブルが存在するアプリケーション設計に問題が発生するかと思います。
その場合、キャッシュとして保存されたテーブル情報を一度削除をしなければ、変更された状態のテーブル情報を
取得することができなくなり、「find()」などでも問題となってしまいます。

そこで削除する方法を探してみました。
単純にCakePHPには定数の「CACHE」であるキャッシュディレクトリへのパスがあるので
その定数を使って削除する方法がありますが、無駄なコーディングが増えるので
CakePHPの内部を調べてテストしてみたところ発見!1行のコーディングで削除できます。

削除するためのコーディングはこちら

Cache::delete('ファイル名','_cake_model_')

ここで注意することは指定する「ファイル名」です。
この名称の指定はキャッシュ機能が「File」エンジンを利用して、設定を変更していない場合は
ファイル名のプレフィックスとして「cake_model_」が自動でつきます。
「ファイル名」の指定は、例えばデータベースへの接続が「default」でテーブル名が「users」の場合は
「ファイル名」を「default_users」となります。

これでテーブルが動的な設定でもCakePHPを問題なく利用できかと思います。

コメント