我有一个具有此功能的SectorModel:
public function update(Sector $sector) {
$this->db->where('sector_id', $sector->getScetor_id());
return $this->db->update(_SECTOR_, $sector);
}
有时我只会更改Sector对象的名称:
$Sector = new Sector();
$Sector->setSector_name = 'test';
$this->SectorModel->update($Sector);
生成的选择如下:
UPDATE realestate_sector SET sector_name = 'teste', sector_description = NULL
它会更新,但会将所有其他属性设置为NULL,因为它没有在我的对象上设置。 现在,我必须在发送之前填充整个对象。
有没有办法映射Sector类并只更新对象上发送的内容?
提前感谢您的帮助。
对不起打字错误,我的英语不好=)
答案 0 :(得分: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中找到有关迭代对象的一些信息
答案 1 :(得分:1)
最简单的方法是使用数组 - 文档http://codeigniter.com/user_guide/database/active_record.html#update - 您只需创建一个包含您想要更新的值并执行$this->db->update('mytable', array('name' => 'test'), array('id' => $id));
调用的所有列的数组。这只会更新您在First数组中指定的列。第二个数组充当WHERE表达式。
我能想到为什么你的其他值被设置为NULL的唯一原因是因为在你的例子中你创建了一个类的新实例,其他值必须被设置为空或者被设置为NULL 。它会(如果是这种情况)更好地从表中获取记录,然后在填充的记录上更改和值并将其传递给要更新的函数。
希望有所帮助。