CakePHP2.2でテーブルを作成したのにテーブルがないと怒られた場合

プロダクション環境に置いたCakePHP2.2のプログラムを書き換えて、新しいテーブルを追加し、新しいモデルを追加しようとしました。

しかしながら、テーブルがないというようなエラーが出ました。

Table graphs for model Graph was not found in datasource default.

テーブルは追加されているがエラーが出る

テーブルは確かに追加しました。

CREATE TABLE IF NOT EXISTS graphs (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    user_id INT UNSIGNED NOT NULL,
    name VARCHAR(64) NOT NULL,
    public BOOLEAN NOT NULL,
    created TIMESTAMP NOT NULL,
    modified TIMESTAMP NOT NULL
) engine=innoDB DEFAULT charset=utf8;

でも毎回エラーが出る。

デバッグモードでない場合はテーブル定義がキャッシュされている

どうやら最近のCakePHPは、しっかりキャッシュが作りこまれているらしく、テーブル定義の取得処理を何度も走らせないようです。

Config/core.phpにdebugレベルの設定がありますが、これが0、要するにプロダクション用のモードになっていると、テーブルを追加してもテーブル定義のキャッシュが優先されてしまうようです。

モデルのキャッシュディレクトリを削除

そういうわけで、モデルのキャッシュ情報を削除してやれば、キャッシュが再構築されます。

rm app/tmp/cache/models/*

サービスを稼働させながらテーブルを追加しようという場合は注意が必要です。

About katty0324

Leave a Reply

Scroll To Top