2017-04-17 126 views
0

我在我的模型的更新功能這是我從我的控制器調用的笨查詢生成器更新功能

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

有三個參數,表名,POST數據和用戶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不支持這樣的查詢。自己寫查詢。或者擴展查詢生成器類並添加寫這樣的方法 – splash58

+0

@ splash58這就是做什麼和它的工作。只是想詢問是否有其他人遇到了這個問題,並有相同的想法。 –

回答

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

傑出的代碼詹姆斯。我會在我的項目中使用它,謝謝 –

+0

歡迎您... –