如果没有id,Cakephp系统用于更新给定id的行,创建一个新行

时间:2011-07-26 13:03:29

标签: php cakephp

您认为创建请求的过程的最佳方式是什么?如果数据库中存在任何现有ID,则更新如果不创建新ID。

我正在使用类似下面的东西,它似乎有效,但有更好的方法吗?

$id = $this->User->findByFacebookId($facebook);

                   if($id){
                       $this->User->set(array(
                          'facebook_id' => $facebook,
                           'longitude' => $longitude,
                           'latitude' => $latitude,
                           'firstname' => $firstname,
                           'surname' => $surname
                       ));
                       $this->User->id = $id['User']['id'];
                       $this->User->save($this->data);

1 个答案:

答案 0 :(得分:3)

Yup,CakePHP基本上默认执行此操作。如果您的数据没有id字段,则会发出INSERT语句,而如果有id字段则会发出UPDATE ... WHERE ID = ?

只是为了说明如何简单地完成此操作,下面是一种在不调用Model::set()或更新Model::id属性的情况下执行相同操作的方法:

    // get existing record (so we can get value of `id` field)
    $existing = $this->User->findByFacebookId($facebook);

    // if record exists, map data to correct record `id`
    if ($existing) {
        $this->data['User']['id'] = $existing['User']['id'];
    }

    // save data to table (`id` determines if INSERT or UPDATE)
    $this->User->save($this->data);