我想更新表中的条目或插入(如果不存在)。我正在使用affected_rows()
函数,但如果数据未更改,则返回0并插入重复的行。
我正在使用此代码,
$datainsert = array(
"vendor_id" => $vendor_id,
"c_date_time" => date('Y-m-d H:i:s')
);
$this->api_vendor_model->update_vendor_login_time($vendor_id, $datainsert);
if ($this->db->affected_rows() == 0) {
$this->api_vendor_model->insert_vendor_login_time($datainsert);
}
但是如果没有行受到影响但却存在vendor_id的条目,则它不起作用。
function update_vendor_login_time($vendor_id, $data) {
$this->db->where('vendor_id', $vendor_id);
$this->db->update('fa_vendor_login_time', $data);
$this->error_check(__FUNCTION__);
}
答案 0 :(得分:0)
您需要检查模型文件中的$this->db->affected_rows()
和return TRUE or FALSE
,而不是控制器。要检查重复输入,您需要使用选择查询
<强> MODEL 强>
function update_vendor_login_time($vendor_id, $data) {
$q = $this->db->select('id')// add your column nae here
->from('fa_vendor_login_time')
->where(array('vendor_id' => $vendor_id))->get();
if ($q->num_rows() == 0) {
$this->db->where('vendor_id', $vendor_id);
$this->db->update('fa_vendor_login_time', $data);
$this->error_check(__FUNCTION__);
if ($this->db->affected_rows() > 0) {
return TRUE;
} else {
return FALSE;
}
}else{
return TRUE;
}
}
<强> CONTROLER 强>
$insert = $this->api_vendor_model->update_vendor_login_time($vendor_id, $datainsert);
if (!$insert) {
$this->api_vendor_model->insert_vendor_login_time($datainsert);
}
答案 1 :(得分:0)
不,没有这样的功能。
affected_rows()
以这种方式工作,因为这是数据库的工作原理 - 它不会返回它没有实际更新的行的反馈。这超出了框架的控制范围。