2017-04-17 16 views
0

私はCodeIgniterのクエリビルダ更新機能

if($_POST) 
{ 
    $this->User_model->update('user_about',$_POST,$this->session->userdata['id']); 
} 

は三つのパラメータ、テーブル名、ポストデータとユーザIDを取るように私は私のコントローラから呼び出す私のモデルでの更新機能を持っています。機能はそれ以外の場合は更新し、特定のユーザーのレコードは、それが挿入する必要があり存在しない場合はチェックしている私はここでやっている

public function update($table,$data,$id) 
{ 
    $row=$this->db->select('*')->from($table)->WHERE('user_id',$id)->row(); 
    if($row) 
    { 
     $this->db->WHERE('user_id',$id)->UPDATE($table,$data); 
    } 
    else 
    { 
     $data['user_id']=$id; 
     $this->db->insert($table,$data); 
    } 
} 

として、モデルで定義されています。魅力

質問

IF条件ブロックをスキップする方法はありますように動作します?。チェック自体を実行するクエリビルダには何らかの条項がありますか?

+0

mysqlのみでは、INSERT .. ON DUPLICATE KEY UPDATEを使用できますが、codeigniterはそのようなクエリをサポートしていません。自分でクエリを書く。またはクエリビルダクラスを拡張するadnd write such method – splash58

+0

@ splash58 thats何がやっているのか、その作業。他の誰かがこの問題に遭遇し、同じ考えを持っているかどうか尋ねたいだけでした。 –

答えて

1

ここでは、私がプログラミングで常に使用していた、重複した機能に対するカスタム汎用の挿入と更新があります。

public function updateOnDuplicate($table, $data) 
    { 
    if (empty($table) || empty($data)) return false; 
    $duplicate_data = array(); 

    foreach($data AS $key => $value) { 
     $duplicate_data[] = sprintf("%s='%s'", $key, $value); 
    } 

    $sql = sprintf("%s ON DUPLICATE KEY UPDATE %s", $this->db->insert_string($table, $data), implode(',', $duplicate_data)); 

    $this->db->query($sql); 
    return $this->db->insert_id(); 
    } 

上記の関数をモデルで使用し、コントローラで呼び出すことができます。この関数は、重複が発生した場合に値を更新します。詳細説明A Generic CodeIgniter Function for both Update and Insertが必要な場合は、ブログの投稿に従ってください。

+0

優れたコードJames。私は私のプロジェクトのおかげでそれを使用します –

+0

あなたは歓迎です... –

関連する問題