2011-07-26 11 views
2

リクエストが行われたときにプロシージャを作成し、データベースに既存のIDがある場合は、新しいものを作成しない場合。idが存在しない場合は、指定されたIDの行を更新するためのCakephpシステム新しい行を作成

私は以下のようなものを使用していましたが、うまくいくようですが、より良い方法がありますか?

$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); 

答えて

3

うん、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); 
+0

おかげで、私は実際にいくつかのフィールド値ので、設定を使用するために必要な交尾します私はちょうど列の1つを否定したいと思った。 –

関連する問題