21
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【CakePHP】saveメソッド

Last updated at Posted at 2014-01-20

基本編

プライマリーキー(デフォは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()される。
21
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?