cakePHPの$model->saveにおけるUpdateとInsert
cakePHPの$mode->saveで1時間以上ハマってしまった。
$model->saveは挿入データのidがnullならInsert,そうでなければUpdateする仕様になってる。
なので以下のようなコードを書けばレコードが2つInsertされると思って実行してみると。。
<?php $this->Model->save($this->data); //1つめのレコードInsert unset($this->data['Model']['id']); //unsetでid削除 $this->Model->save($this->data); //2つめのレコードInsert ?>
レコードが1つしか登録されない。
実行されたSQLをデバッグモードONにしてみてみると、1つめのレコードはInsertされているが
2つのめレコードはInsertされず、1つめのレコードをUpdateしているだけになっていた。
id削除してるのになぜ?
ちなみにunsetの仕様は以下のようになっているのでidはNULLになっているはず。
PHPマニュアル NULL
特別な NULL 値は、ある変数が値を持たないことを表します。NULL は、NULL 型の唯一の値です。 変数は、以下の場合に NULL とみなされます。 ・定数 NULL が代入されている場合。 ・まだ値が何も代入されていない場合 ・unset() されている場合。
悩んだ挙句,コードを以下のように変更すると2つのレコードを無事Insertできた。
<?php $this->Model->save($this->data); //1つめのレコードInsert //unset($this->data['Model']['id']); $this->data['Model']['id'] = NULL ; //unset使わず、NULLを代入 $this->Model->save($this->data); //2つめのレコードInsert ?>
なぜこれだと通るのかまだ原因特定はまだできてない。。。
環境
PHP 4.3.9 cakephp 1.1.17.5612