这可能/真的吗?
例如,如果我想更新 id 为 1 的行,但不存在行,这个函数(更新函数)会自动插入一个包含给定数据的新行吗?是否有启用此功能的参数?
如果不是,那么在不使用单独的函数来评估表并在行存在时返回 bool 的情况下处理这个问题(如果可能的话)的最佳方法是什么。(然后从那里更新或插入)
不是什么大问题..只是在寻找澄清并想知道是否有人知道这一点。
这可能/真的吗?
例如,如果我想更新 id 为 1 的行,但不存在行,这个函数(更新函数)会自动插入一个包含给定数据的新行吗?是否有启用此功能的参数?
如果不是,那么在不使用单独的函数来评估表并在行存在时返回 bool 的情况下处理这个问题(如果可能的话)的最佳方法是什么。(然后从那里更新或插入)
不是什么大问题..只是在寻找澄清并想知道是否有人知道这一点。
我在此链接中找到了一个很好的解决方案,如果有人仍在寻找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
));
也许您正在寻找的是这个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);
}
$data 可以是从控制器传递的整个 $_POST 数组。我会将这个函数放在代表表(my_table)的模型中。
这是一种应该有效的解决方案。让我们知道。