Система Cakephp для обновления строки для данного идентификатора, если идентификатор не существует, создать новую строку - PullRequest
2 голосов
/ 26 июля 2011

Что, по вашему мнению, является наилучшим способом создания процедуры, в которой выполняется запрос, и, если в базе данных есть какой-либо существующий идентификатор, обновите, если не создайте новый.

Я использовал что-то вроде ниже, и это похоже на работу, но есть ли лучший способ?

$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 Ответ

3 голосов
/ 26 июля 2011

Да, 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...