У меня две функции в моей модели. Первый:
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 сбрасывает многие параметры запроса, которые вы создаете после его выполнения. Вам нужно будет повторно добавить предложения WHERE после первого вызова update ().
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 ));