save時の注意

cakeは稀に意図したデータ以外をDBに保存してしまう場合がるので最近は必ずsaveの前に必ず

$this->Model->create();

を行っていたのですが、実は罠があってこれは完全にデータベースにに対するデータを初期化するようです。
なのでUPDATE時に使うと大変なことになります。
(INSERTの時は必ずしてください)

※データベースの設計上でデフォルト値などを指定しているとその値を入れた状態で渡したデータをマージされるということです。

対応としては今までコントローラー内でのバリデーションでしか使いませんでしたが、こっちが正しいようです。

$this->Model->set();

ただこの場合は値を常保持し続けるので注意が必要です。


■2009-12-21
cakephperさんの日記でもエントリーされてますね。
http://d.hatena.ne.jp/cakephper/20091221/1261385134

■2009-12-25
http://book.cakephp.org/ja/view/75/Saving-Your-Data
ループで save を使うときは、create() をコールすることを忘れないでください。

この記述にダマされないように!
ループの場合(UPDATE)は

$this->Model->id = null;

が正解です。