CodeIgniter 不了解两个更新查询中的位置


CodeIgniter doesn't understand where in two update queries

我的模型中有两个函数。第一个:

    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; }
}

问题是,第一个有效,一个无效。我的意思是,它可以工作,但它会更新每一行,而不仅仅是那些具有匹配gameuser的行。变量传递良好。

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
    ));