CakePHPのModel->save()は、
- idが設定されていればUpdate
- 設定されていなければInsert
というのは判っていたんだけど、例えばモデル「User」のキーが「USER_ID」という名前だったとき
<?php ... $this->User->UserId = $this->data["User"]["USER_ID"]; $data["User"]["PASSWD"] = $this->data["User"]["PASSWD"]; $this->User->save($data); ... ?>
とすると、どうやってもUpdateにならずInsertになってしまう。
なんでかなーと思ったら、Model側の設定だった。
<?php class User extends AppModel { var $name = "User"; var $useTable = "users"; var $primaryKey = "USER_ID"; var $displayField = "USER_ID"; ... ?>
しておいてから
<?php ... $this->User->id = $this->data["User"]["USER_ID"]; $data["User"]["PASSWD"] = $this->data["User"]["PASSWD"]; $this->User->save($data); ... ?>
するといけた。
要は、
「キー項目を設定しないとダメ」
じゃなくて、
「$this->Model->idに設定しないとダメ」
ってことだったのね。判りづらい。