CakePHPのDB上のデータを新規追加したりするときはsaveメソッドを使うことが多いと思います。便利です。しかし、挙動を理解しておかないと意図しない動きをすることがあります。
対象はCakePHP2系となっています。
■データ新規追加時に連続してsaveを実行すると、2回目以降のsaveはupdateになる
以下の様な実装があったとします。$targetDataListに入っている3つのデータを新規にDB上に登録します。モデルに記述しているものとします。
$targetDataList = ['hoge', 'moge', 'hogehoge'];
foreach($targetDataList as $targetData) {
    $insertData = ['data' => $targetData];
    $this->save($insertData, false);
}saveは合計で3回実行されるのですが、2回目以降の実行はすべてupdateになります。そのため、DB上のデータは以下のようになります。
id   data      created      modified
1    hogehoge  ......本来であれば、3つのデータ【hoge】と【moge】と【hogehoge】が挿入されていなければいけないのですが、最後の【hogehoge】だけになってしまいます。これは1回目のsaveメソッドでinsert、それ以降のsaveメソッドはすべてupdateとなっているために発生します。
これを解消するためには、以下のように都度$this->create();をしてあげると意図したとおり、3つのデータが挿入されます。
$targetDataList = ['hoge', 'moge', 'hogehoge'];
foreach($targetDataList as $targetData) {
    $insertData = ['data' => $targetData];
    $this->create();  // ここが違い。都度create()を実行する。
    $this->save($insertData, false);
}
これで、DB上のデータも以下のように正しく挿入されます。
id   data      created      modified
1    hoge      ......
2    moge      ......
3    hogehoge  ......
気をつけないと、意図しないデータを意図しない形で上書きしたりしてデータのロストにつながったりします。気をつけましょう。
参考にして見てください。では。
 
  
  
  
  
