这可能/是真的吗?
例如,如果我想更新id为1的行,但不存在行,则此功能(更新功能)会自动 插入 一个新行用给定的数据?是否有参数来启用它?
如果没有,那么处理这个问题的最佳方法是什么(如果可能的话),而不使用单独的函数来评估表,如果行存在则返回bool。 (然后从那里更新或插入)
没有太大的问题..只是在寻找澄清,并想知道是否有人知道这一点。
答案 0 :(得分:8)
我在link中找到了一个很好的解决方案,我希望如果有人仍然在寻找 codeigniter 中的解决方案,这会有所帮助:
$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
));
答案 1 :(得分:5)
如果你正在使用MySQL,而你的id
是桌面上的唯一键,那么你可能正在寻找的是INSERT ... ON DUPLICATE KEY UPDATE
。
您必须手动构造查询并传递给$this->db->query()
函数,而不是任何内置的活动记录,如数据库驱动程序的辅助函数。
答案 2 :(得分: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);
}
$ data可以是从控制器传递的整个$ _POST数组。我会将此函数放在表示表(my_table)的模型中。
这是一个应该有效的解决方案。请告诉我们。