1

モデルには 2 つの関数があります。最初の1つ:

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

そして2番目のもの:

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

問題は、最初のものは機能し、2 つ目は機能しないことです。つまり、機能しますが、一致する行だけでなく、すべての行を更新しgameますuser. 変数は正常に渡されます。

4

4 に答える 4

2

where 条件は、最初の update ステートメントにのみ適用されます。以下で試してみてください。

$data = array(
    'rate' => $rate
);

$where = array(
    'game' => $game,
    'user' => $user
);

$q = $this->db->update('rates', $data, $where);
$q = $this->db->update('ownership', $data, $where);
于 2012-08-13T08:03:17.867 に答える
0

where 配列を 3 番目のパラメーターとして渡し、適切に機能していることを確認します。

$q = $this->db->update('rates',$data,array(
        'game' => $game,
        'user' => $user
    ));
于 2012-08-13T08:03:17.923 に答える
0

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; }
}
于 2012-08-13T08:04:03.430 に答える
0

まず、毎回 $q 変数を設定する必要があるのはなぜですか? 次に、最後のステートメントでは、2 番目のクエリが実行されたかどうかのみを確認します。

私は次のようなことをします:

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;
}
于 2012-08-13T08:04:19.367 に答える