CakePHPのModel::save()メソッド
テレグノシスですが、現在テストに入り、年内にリリースできるよう対応しております。
フロントで、CakePHP1.2 を使用しておりますが、Model::save() で気になるところがありました。
CREATE TABLE hoge (
foo int NOT NULL DEFAULT 0,
bar varchar(30)
);
というように、テーブル作成時にデフォルト値を設定した場合、第1引数の$dataにデフォルト値を設定しているfooを入れないで、Model::save()を
実行した時、UPDATEだった場合にfooがデフォルト値で更新されてしまうという現象がありました。
Model::save()のリファレンスを見たところ、第3引数の$fieldListで更新するフィールドを指定できるようだったので、app_model.php で下記のように save() をオーバライドして、$filedListが指定されなかった場合、$data から $filedList を生成するようにしました。
function save($data=null, $validate=true, $fieldList=array())
{
if ( count($fieldList) === 0 ) {
$fieldList = array_keys($dataList);
}
return parent::save($data, $validate, $fieldList);
}
CakePHP本体のソースを確認してみたところ、確かにデフォルト値で更新するようになっているようだったので仕様なのだと思うのですがいまいちしっくりしていないです。
それとも、CakePHPの場合、フィールドにデフォルト値は設定してはいけないものなのでしょうか。
おなじくハマりました。
仕様とはいえ、ひどい実装ですよね、、、。
コメント by かとう — 2009/3/10 火曜日 @ 10:47:58