cutmail's blog

write the code

cakephpでINSERTするつもりがUPDATEになる場合の対処法

今日悩んだことを調べ、あとで思い出すときのためにメモるシリーズ。

コントローラーの中で配列の中身を一つずつINSERTするときは、
こんな風に書きますが、

<?php
foreach ($hoges as $key => $value) {  
    if($value){
        $this->data['Hoge']['test'] = $value;  
        $this->Hoge->save($this->data);  
    }  
}  
?>

これだと、2週目以降が全てUPDATEになってしまいます。

primaryKeyをその都度nullにするっていう方法もありますが、
こんなの↓

<?php
foreach ($hoges as $key => $value) {  
    if($value){
    $this->data['Hoge']['id'] = null;
        $this->data['Hoge']['test'] = $value;  
        $this->Hoge->save($this->data);  
    }  
}  
?>

あまりスマートではないので、
そういう場合は、

<?php
foreach ($hoges as $key => $value) {  
    if($value){
    $this->Hoge->create();
    $this->data['Hoge']['id'] = null;
        $this->data['Hoge']['test'] = $value;  
        $this->Hoge->save($this->data);  
    }  
}  
?>

としてやると、できます。
つまり初期化してるんですね。

for文でINSERTしてるとページロードが重い。。。