2013-04-07 75 views
4

这可能是/ true?CodeIgniter update()默认为insert()

举例来说,如果我想用1 id来更新行,但没有行存在,将这一功能(更新功能)会自动插入新行与给定的数据?有没有一个参数来启用它?

如果不是这样,如果不使用单独的函数来评估表并返回布尔值(如果该行存在),那么处理此问题的最佳方法是什么(如果可能)。 (然后更新或从那里插入)

没有太多的问题..只是寻求澄清,并想知道如果有人知道这一点。

回答

5

也许你正在寻找的是这个INSERT ... ON DUPLICATE KEY UPDATE - 只要你使用的是MySQL,并且你的id是表格上的唯一键。

您必须手动构建查询并传递给$this->db->query()函数,而不是像DB驱动程序的辅助函数那样内置任何内置活动记录。

1

我不知道你为什么会用这个,但处理这个(有一个功能,你的要求)的一种方法如下:

function update_or_insert($data){ 

    if(!array_key_exists('id',$data)) 
     return $this->db->insert($data); 

    $row = $this->db->get_where('mytable',['id' => $data['id']])->row(); 

    if(!$row) return false; 

    $this->db->where($row->id); 
    return $this->db->update('my_table',$data); 
} 

$的数据可以是一个完整$ _ POST阵列从传递控制器。我会把这个函数放在代表表格的模型中(my_table)。

这是应该工作的一种解决方案。让我们知道。

8

我找到了一个很好的解决这个link,我希望它能帮助,如果有人还在寻找笨在的解决方案:

$sql = 'INSERT INTO menu_sub (id, name, desc, misc) 
     VALUES (?, ?, ?, ?) 
     ON DUPLICATE KEY UPDATE 
      name=VALUES(name), 
      desc=VALUES(desc), 
      misc=VALUES(misc)'; 

$query = $this->db->query($sql, array($id, 
             $this->validation->name, 
             $this->validation->desc, 
             $this->validation->misc 
            ));