2011-06-02 70 views
0

我有這個功能的SectorModel類:笨如何映射發送到模型

public function update(Sector $sector) { 
     $this->db->where('sector_id', $sector->getScetor_id()); 
     return $this->db->update(_SECTOR_, $sector); 
} 

有,我會改變行業對象的唯一名稱次:

$Sector = new Sector(); 
$Sector->setSector_name = 'test'; 

$this->SectorModel->update($Sector); 

生成的選擇看起來像:

它將更新,但會設置所有其他屬性爲NULL,因爲它不是集合O我的對象。 現在,我必須在發送之前填充整個對象。

有沒有辦法映射Sector類並僅更新對象上發送的內容?

在此先感謝您的幫助。

對不起任何錯別字,我的英語不是很好=)

+1

,你可以取消設置NULL性能 – Dalen 2011-06-02 14:33:09

+0

如何做到這一點戴爾? – Gerep 2011-06-02 14:41:53

回答

2

就循環,然後如果有的話NULL只是unset放棄它。

這裏是你的模型的方法編輯以達到:

public function update(Sector $sector) 
{ 
    foreach($sector as $k=>$v) 
    { 
     if($v === NULL) 
     unset($sector->$k) 
    } 

    $this->db->where('sector_id', $sector->getScetor_id()); 
    return $this->db->update(_SECTOR_, $sector); 
} 

Here你可以找到關於迭代對象在PHP中的一些信息

+0

非常感謝Dalen,unset()完美工作...... =) – Gerep 2011-06-02 18:14:26

1

這樣做將是寧可使用陣列,最簡單的 - 在這裏http://codeigniter.com/user_guide/database/active_record.html#update文檔 - 你剛纔創建的所有列及其值的數組您想要更新並執行$this->db->update('mytable', array('name' => 'test'), array('id' => $id));呼叫。這隻會更新您在第一個數組中指定的列。第二個數組充當WHERE表達式。

我能想到的唯一原因是爲什麼你的其他值被設置爲NULL是因爲在你的例子中你創建了一個新的類實例,其他的值必須設置爲空或者設置爲空值。它會(如果是這種情況)最好從表中獲取一條記錄,然後更改並記錄填充的記錄並將其傳遞給函數以進行更新。

希望有所幫助。通過您的所有對象的性質在

+0

感謝您的回覆Johann,我收到了記錄並填充了對象,但這是很多工作,對於每次更新,我必須進行選擇,這不是很好。關於數組,我在數據庫上有很多列,所以在所有更新和插入操作時都會很費力..... – Gerep 2011-06-02 14:38:32