Model->save()の挙動について

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に設定しないとダメ」
ってことだったのね。判りづらい。