2013-04-07 35 views
4

這可能是/ true?CodeIgniter update()默認爲insert()

舉例來說,如果我想用1 id來更新行,但沒有行存在,將這一功能(更新功能)會自動插入新行與給定的數據?有沒有一個參數來啓用它?

如果不是這樣,如果不使用單獨的函數來評估表並返回布爾值(如果該行存在),那麼處理此問題的最佳方法是什麼(如果可能)。 (然後更新或從那裏插入)

沒有太多的問題..只是尋求澄清,並想知道如果有人知道這一點。

回答

5

也許你正在尋找的是這個INSERT ... ON DUPLICATE KEY UPDATE - 只要你使用的是MySQL,並且你的id是表格上的唯一鍵。

您必須手動構建查詢並傳遞給$this->db->query()函數,而不是像DB驅動程序的輔助函數那樣內置任何內置活動記錄。

1

我不知道你爲什麼會用這個,但處理這個(有一個功能,你的要求)的一種方法如下:

function update_or_insert($data){ 

    if(!array_key_exists('id',$data)) 
     return $this->db->insert($data); 

    $row = $this->db->get_where('mytable',['id' => $data['id']])->row(); 

    if(!$row) return false; 

    $this->db->where($row->id); 
    return $this->db->update('my_table',$data); 
} 

$的數據可以是一個完整$ _ POST陣列從傳遞控制器。我會把這個函數放在代表表格的模型中(my_table)。

這是應該工作的一種解決方案。讓我們知道。

8

我找到了一個很好的解決這個link,我希望它能幫助,如果有人還在尋找笨在的解決方案:

$sql = 'INSERT INTO menu_sub (id, name, desc, misc) 
     VALUES (?, ?, ?, ?) 
     ON DUPLICATE KEY UPDATE 
      name=VALUES(name), 
      desc=VALUES(desc), 
      misc=VALUES(misc)'; 

$query = $this->db->query($sql, array($id, 
             $this->validation->name, 
             $this->validation->desc, 
             $this->validation->misc 
            ));