

前提として以下のようなテーブルが有ります

[code]

    Create Table: CREATE TABLE `data` (
      `id` varchar(100) NOT NULL DEFAULT '',
      `name` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
[/code]

このテーブルをユーザにid,nameを指定させて更新させたいと思います。  
シンプルに以下のsaveメソッドを実行すると

[code]

    $this->data->save([
        'id' => 'ユーザの入力したID',
        'name' => 'ユーザの入力した名前'
    ]);
    
[/code]

※バリデーションは考慮しない

IDが存在する場合は更新されますが、存在しない場合は"そのIDで新規登録"されてしまいます。  
存在しないIDなら何もせずに処理を終わって欲しいのですがそのような事は可能でしょうか。


CC BY-SA 3.0
2016-05-08T15:42:29.903
24647
2016-05-17T04:11:23.647
11050
question
php cakephp
CakePHPで更新処理をする際に新規登録されるのを防ぎたい


私はCakeを使ったことがないのですが、  
先にユーザー IDが存在するかどうかチェックしてからsave処理をしてはどうでしょうか。


CC BY-SA 3.0
2016-05-15T12:04:07.483
24878
2016-05-15T12:04:07.483
15377
24647
answer


Controllerに、beforeSaveというコールバックメソッドがあります。  
<http://book.cakephp.org/2.0/ja/models/callback-methods.html>

これを使うと、saveをする際にbeforeSave()の処理を行い、返り値がtrueだった場合にsave()が行われます。  
このbeforeSave()の中で、

[code]

    public function beforeSave() {
        return !empty($this->find('count', array('conditions' => array('id' => $this->id))));
    }
    
[/code]

等として存在確認を行い、存在していたらsave()継続、存在しなければsave()しない、という形にするといいのでは。


CC BY-SA 3.0
2016-05-17T04:11:23.647
24919
2016-05-17T04:11:23.647
15528
24647
answer