这可能是/ true?CodeIgniter update()默认为insert()
举例来说,如果我想用1 id来更新行,但没有行存在,将这一功能(更新功能)会自动插入新行与给定的数据?有没有一个参数来启用它?
如果不是这样,如果不使用单独的函数来评估表并返回布尔值(如果该行存在),那么处理此问题的最佳方法是什么(如果可能)。 (然后更新或从那里插入)
没有太多的问题..只是寻求澄清,并想知道如果有人知道这一点。
这可能是/ true?CodeIgniter update()默认为insert()
举例来说,如果我想用1 id来更新行,但没有行存在,将这一功能(更新功能)会自动插入新行与给定的数据?有没有一个参数来启用它?
如果不是这样,如果不使用单独的函数来评估表并返回布尔值(如果该行存在),那么处理此问题的最佳方法是什么(如果可能)。 (然后更新或从那里插入)
没有太多的问题..只是寻求澄清,并想知道如果有人知道这一点。
也许你正在寻找的是这个INSERT ... ON DUPLICATE KEY UPDATE
- 只要你使用的是MySQL,并且你的id
是表格上的唯一键。
您必须手动构建查询并传递给$this->db->query()
函数,而不是像DB驱动程序的辅助函数那样内置任何内置活动记录。
我不知道你为什么会用这个,但处理这个(有一个功能,你的要求)的一种方法如下:
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)。
这是应该工作的一种解决方案。让我们知道。
我找到了一个很好的解决这个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
));