基本編
プライマリーキー(デフォはid)がなければinsert、あればupdateが発行される。
idがなければinsertになる。
$User->save([
'name'=>'kazu',
'age'=>32,
]);
//=> INSERT INTO `db_name`.`users` (`name`, `age`,`modified`, `created`) VALUES ('kazu', 32, '20XX-XX-XX XX:XX:XX', '20XX-XX-XX XX:XX:XX')
idがあればupdateになる。
$User->save([
'id'=>1
'name'=>'kazu',
'age'=>32,
]);
//=>UPDATE `db_name`.`users` SET `id` = 1, `name` = 'kazu', `age` = 32,`modified` = '20XX-XX-XX XX:XX:XX' WHERE `db_name`.`users`.`id` = 1
戻り値
戻り値は、成功した場合はsave()した配列、失敗時はfalseを返す。
if($User->save($data){
//成功時の処理
}else{
//失敗時の処理
}
ループでsave()を繰り返す場合
save()実行後、結果をモデル内に保持するので、ループで繰り返す場合、毎回create()を行い初期化する。
create()を忘れて、最初はidなしでinsertになるが、以降のsave()でidありでupdateになってしまうことがよくある。
ループで繰り返す場合
foreach($user_list as $user){
//create()で初期化する
$User->create();
$User->save([
'name'=>$user['name'],
'age'=>$user['age'],
]);
}
save()するカラムを指定
第三引数にsave()するカラムを指定することができる。
POSTされた値のうち特定カラムのみsave()したい場合に使う。
$data = $this->request->data;
var_dump($data);
/*
[
'name'=>$user['name'],
'age'=>$user['age'],
];
*/
$saveField = ['name'];
$User->save($data,null,$saveField);
//=>nameカラムのみsave()される。