2012-08-30 107 views
0

這是我迄今爲止如何在codeigniter中更新多個具有相同名稱的輸入?

控制器

 $i = 0; 
    foreach ($this->input->post('skill') as $cat) { 
    $data[$i++]['skill'] = $cat; 
    } 
    $this->db->update_batch('skills', $data); 
    } 

型號

function update_record($data) 
{ 

    $this->db->update('skills', $data); 
    } 

查看

  <?php foreach ($skills as $skill):?> 

<input type="text" name="skill[]" value="<?php echo $skill->skill;?>"> 

       <?php endforeach?> 

我得到一個數據庫錯誤

You must specify an index to match on for batch updates. 

請幫我解決這個問題我嘗試了谷歌搜索,沒有任何東西出現。

+0

您是否嘗試過使用[where_in()](http://codeigniter.com/user_guide/database/active_record.html#select)? –

+0

您正在從您的控制器中調用update_batch fucntion,並且我無法在您的模型中看到該方法 – Wearybands

+0

我對此很陌生,我對此表示歉意。你的意思是我需要把update_batch放入模型中嗎? @UmairIqbal – Andy

回答

1

好的,這是問題所在。 根據CI Docs for update_batch,您需要添加第三個參數,即where鍵。這裏是一個來自文檔的例子。

$data = array(
    array(
     'title' => 'My title' , 
     'name' => 'My Name 2' , 
     'date' => 'My date 2' 
    ), 
    array(
     'title' => 'Another title' , 
     'name' => 'Another Name 2' , 
     'date' => 'Another date 2' 
    ) 
); 

$this->db->update_batch('mytable', $data, 'title'); 

因此,上面的查詢中標題列是該行與之比較的內容。因此,對於標題爲'我的標題'的行,第一個數組元素用作更新,對於那些'Another Title'用作第二個元素。我希望你明白。如果我們沒有比較字段,那麼整個數據庫將被更新:-P

這是從上述操作產生的最終查詢。

UPDATE `mytable` SET `name` = CASE 
WHEN `title` = 'My title' THEN 'My Name 2' 
WHEN `title` = 'Another title' THEN 'Another Name 2' 
ELSE `name` END, 
`date` = CASE 
WHEN `title` = 'My title' THEN 'My date 2' 
WHEN `title` = 'Another title' THEN 'Another date 2' 
ELSE `date` END 
WHERE `title` IN ('My title','Another title') 

希望這會有所幫助。

相關問題