我的模型中有两个函数。第一个:
public function updateOwn($game,$own,$user) {
$data = array(
'own' => $own
);
$q = $this->db->where(array(
'game' => $game,
'user' => $user
));
$q = $this->db->update('ownership',$data);
if($q) { return true; } else { return false; }
}
和塞昆德的:
public function updateRate($game,$rate,$user) {
$data = array(
'rate' => $rate
);
$q = $this->db->where(array(
'game' => $game,
'user' => $user
));
$q = $this->db->update('rates',$data);
$q = $this->db->update('ownership',$data);
if($q) { return true; } else { return false; }
}
问题是,第一个有效,一个无效。我的意思是,它可以工作,但它会更新每一行,而不仅仅是那些具有匹配game
和user
的行。变量传递良好。
where 条件仅适用于第一个更新语句。请在下面尝试。
$data = array(
'rate' => $rate
);
$where = array(
'game' => $game,
'user' => $user
);
$q = $this->db->update('rates', $data, $where);
$q = $this->db->update('ownership', $data, $where);
CodeIgniter 会在执行后重置您构建的许多查询参数。您需要在第一次 update() 调用后重新添加 WHERE 子句。
public function updateRate($game,$rate,$user) {
$data = array(
'rate' => $rate
);
$q = $this->db->where(array(
'game' => $game,
'user' => $user
));
$q = $this->db->update('rates',$data);
$q = $this->db->where(array(
'game' => $game,
'user' => $user
));
$q = $this->db->update('ownership',$data);
if($q) { return true; } else { return false; }
}
首先,为什么每次都需要设置$q变量?其次,在最后一个语句中,仅检查是否完成了第二个查询。
我会做这样的事情:
public function updateRate($game,$rate,$user) {
$data = array(
'rate' => $rate
);
$this->db->where('game', $game)->where('user', $user);
$first_query = $this->db->update('rates',$data);
$this->db->where('game', $game)->where('user', $user);
$second_query = $this->db->update('ownership',$data);
return $first_query && $second_query;
}
将 where 数组作为第三个参数传递以确保其正常工作:
$q = $this->db->update('rates',$data,array(
'game' => $game,
'user' => $user
));