Codeigniter如何映射发送给模型的类

时间:2011-06-02 14:26:27

标签: php database codeigniter frameworks model

我有一个具有此功能的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类并只更新对象上发送的内容?

提前感谢您的帮助。

对不起打字错误,我的英语不好=)

2 个答案:

答案 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 。它会(如果是这种情况)更好地从表中获取记录,然后在填充的记录上更改和值并将其传递给要更新的函数。

希望有所帮助。