2011-10-02 39 views
1

我有一個奇怪的問題,也許我只是不明白的Active Record是如何工作做得不夠好,但在這裏它是。我試圖用特定的ID更新記錄。爲了簡單和測試,我只是直接提供id而不是變量。現在更新使用Active Record的CI中

,如果我理解正確的活動記錄,它似乎從我所用的實體框架ORM什麼我已經習慣了在Asp.Net非常不同的方式工作。但據我瞭解,您可以先在一行中選擇記錄,然後當您在下一行中運行更新時,該特定記錄將被更新。至少這是它在文檔中的外觀。下面是從文檔的例子:

$data = array(
       'title' => $title, 
       'name' => $name, 
       'date' => $date 
      ); 

$this->db->where('id', $id); 
$this->db->update('mytable', $data); 

所以,我想在我的代碼做同樣的事情:

 $updateData = array(
      'description' => 'My localhost' 
     ); 

     $this->myDb->where('id', 2832); 
     $this->db->update('Users', $updateData); 

嗯,因爲在所有的預期,沒有工作!它確實更新了數據庫,但它更新了每條記錄,以便所有記錄都將描述字段更新爲「我的本地主機」!我仍然只使用一個測試數據庫好事......

我在文檔中看到有另一種方式中,通過在更新語句供應ID:

$this->db->update('Users', $updateData, array('id' => 2832)); 

這個工作好,好極了。但是...我還是想知道爲什麼第一種選擇沒有工作,因爲如果我不明白這一點,我可能使數據庫中的其他破壞性的錯誤......

我真的很感激就如何澄清這是有效的,爲什麼所有記錄都被更新了。

回答

3
$updateData = array(
    'description' => 'My localhost' 
); 

$this->myDb->where('id', 2832); 
$this->db->update('Users', $updateData); 

這是行不通的,因爲你所申請的「where」子句來$this->myDb,然後$this->db調用更新。由於$this->db沒有限制,所有記錄都在更新。

將其更改爲:

$this->db->where('id', 2832); 
$this->db->update('Users', $updateData); 
+0

好吧,愚蠢的錯誤...謝謝! – Anders