CodeIgniter не понимает, где в двух запросах обновления

У меня две функции в моей модели. Первый:

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