save前のcreateの使い方

Cakephp1.2.5を使ってます。
たまにごっちゃになる、model::create()の話。APIマニュアルにもあるとおり、Insert文が発行されるsave()の前にだけ使います。Update文の時はcreate()は使わない方が良いです。bakeしたコントローラでも、addアクションではcreate()を使っていて、editアクションではcreate()を使ってないです。
http://api.cakephp.org/class/model#method-Modelcreate

create()では、保持している$this->idを削除していると同時に、save時のデータにフィールドが存在しない場合は、DBのフィールドからデフォルト値を取得して自動でSaveデータにセットしてしまうため、更新対象じゃないカラムに初期値が上書きされます。。。saveメソッドの引数で保存対象のフィールドを絞っていれば問題ないですが、そうじゃないと大変。。
update時のsaveで与えるデータにhogeフィールドのデータが存在しない場合は、たとえDBのhogeフィールドに値が入っていても、DBで定義したデフォルトバリューで上書きされます。
http://yashio.wordpress.com/2009/12/19/model%e3%81%aecreate%e3%81%a8save%e6%99%82%e3%81%ab%e8%b5%b7%e3%81%93%e3%82%8b%e3%80%81%e3%83%87%e3%83%95%e3%82%a9%e3%83%ab%e3%83%88%e5%80%a4%e8%a8%ad%e5%ae%9a%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/



Model::create()の使いどころとして、下記のように覚えておけばOK.
insertを発行するSaveメソッドが複数回呼ばれる時に、毎回create()を実行し、Saveする。
それ以外のSave時は特に事前にcreate()する必要なし(Insert/Updateに関わらず)
SaveメソッドがInsertなのかUpdateなのか事前に判断するのは嫌だという場合(例えばaddとeditアクションを共通化するような場合)は、Save前にコントローラで

$this->Model->id = false;

を指定し、create()は使わない(ループ処理があるなら、そのループの中でidにfalseをセットする)。この時、セーブするPostデータにプライマリキーのIDをセットしなければInsert, セットしておけばUpdateになります。

Modelという文字列は、利用するモデル名に変更してください。PostモデルでSaveしたい場合は、$this->Post->id = false;になります。

追記2:
ZistaさんからTwitterでコメントを頂きました。ありがとうございます。
saveメソッドでInsertになるかUpdateになるかの判断として、UPDATEになる条件は、セーブするPostデータに、プライマリキーの値があるか、もしくは、モデルのプロパティのid($this->Model->id)に値がセットされているか、そしてDBに該当レコードが存在する場合です。それ以外はInsertになります。
必ずInsertさせたい場合は、$this->data[Model]['id']=nullにして、$this->Model->id=falseにすればOK. 

プライマリIDの値をセットしてSaveすると、select count(*) from hoge where id=50;みたいにして該当レコードがあるかチェックします。存在すればUpdateをかけて、存在しなければセットしたIDの値でInsertをします。