No.67


【CakePHP】テーブルの変更が反映されない

テーブルに新規追加したカラムに値が入らない

 CakePHPドハマリポイントとして、テーブルにカラムを追加した場合に、saveメソッドでそのカラムに値が入らない、というものがあるだろう。最初にはまったときは4時間近く解決に費やしてしまった悪夢のような挙動だ。

 この現象、だいたいはファイルキャッシュの削除で改善される。

rm -f app/tmp/cache/models/*

 厄介なのはこれで直らなかったときだ。

 保存時に使うカラムが固定されているけど、そういう定義もファイルキャッシュも残っていない。この場合疑うべくはメモリである。

 そんなわけで、下記の2種類のどちらかを行うことで今まで直っている。


サーバの再起動

 メモリが完全に入れ替わるので何らかのキャッシュ的要素が削除されてモデルを一から扱うようになる。


デバッグレベルの変更

 core.php で定義されている debug.level が0だとキャッシュ的動作が有効になり、バリバリに働いてしまっている様子。
 これをレベル2にすることで、CakePHP的にキャッシュを全面的に使用しないモードになる。そのため、現状のモデルに含まれている全てのカラムが使用される。

app/Config/core.php

Configure::write('debug', 2);