BETA

CakePHP2 save/saveAll 覚書

投稿日:2018-11-23
最終更新:2018-12-26

saveロジックで保存する際の配列の形に注意

CakePHPでsaveする際、やや配列の形が変わってくるのでそのメモ。

$this->Model->save(Controller)

$data['Model'] = [  
    'id' => 1,  
    'name' => 'suzuki'  
];  
$this->Model->save($data);  

$this->Model->saveAll(Controller)

$data['Model'] = [  
    0 => [  
        'id' => 1,  
        'name' => 'suzuki'  
    ],  
    1 => [  
        'id' => 2,  
        'name' => 'sato'  
    ]  
];  
$this->Model->saveAll($data['Model']);  

saveの場合 $data、saveAllの場合 $data['Model'] とモデル名まで含まれるため注意

ちなみに、$this->Form->input(); でsaveAllしやすい配列で値を渡そうとしたとき、View側では

echo $this->Form->create();  
echo $this->Form->input('Model.0.id');  
echo $this->Form->input('Model.0.name');  
echo $this->Form->input('Model.1.id');  
echo $this->Form->input('Model.1.name');  
echo $this->Form->end();  

上記のように記載すると良い。

foreachの中でsaveを回す場合

foreach($saveDatas as $saveData) {  
    //create()で初期化する  
    $this->Model->create();  
    $this->Model->save([  
        'name' => $saveData['name'],  
    ]);  
}  

一度saveをした際、saveしたIDがCake内で保存されるため、foreach内などで連続して保存処理を扱う場合、違うIDのものであることを明示しなければいけない。
create()をすることでIDを初期化することができる。
また、そうでなくとも $saveData['id'] = null; と設定をすると新規保存することが可能になる。

最後に保存したデータのIDを取得する

$this->Model->getLastInsertID();  

※随時更新予定

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@tanakashiの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!