Как «перезагрузить» активную запись CodeIgniter для последовательных запросов?

Я использую CodeIgniter и имею случай, когда две таблицы (проекты и задачи) необходимо обновить со значением сразу после друг друга (для активного столбца необходимо установить значение «n»). Код, который я использую:

function update($url, $id) { $this->db->where('url', $url); $this->db->update('projects', array('active' => 'n')); $this->db->where('eventid', $id); $this->db->update('tasks', array('active' => 'n')); } 

С помощью этого кода таблица проектов обновляется, а таблица задач – нет. Если я закомментирую $ this-> db-> update ('projects', array ('active' => 'n')); то таблица задач обновляется.

Я считаю, что это связано с кешированием, но я попытался выполнить flush_cache перед вызовом db-> update задач, но это не имело никакого эффекта.

Может кто-нибудь объяснить, как последовательные запросы обновления могут быть выполнены с использованием CodeIgniter?

использование

 $this->db->start_cache(); 

Перед началом построения запроса и

 $this->db->stop_cache(); 

После завершения построения запроса. Кроме того, используйте

 $this->db->flush_cache(); 

После остановки кеша.

Это работает:

 $this->db->flush_cache(); 

Если вы не выполняете get () или аналогичный CI, он не всегда очищает кеш. Окончательный код выглядит следующим образом:

 $this->db->from('table'); $this->db->where('field', $field); $count = $this->db->count_all_results(); $this->db->flush_cache(); 

Попробуйте вызвать $this->db->reset(); после первого вызова update .

EDIT: meh, попробуйте $this->db->_reset_write(); чтобы очистить все следы запроса.

Для версии 3 Codeigniter правильный путь:

$db->reset_query()

Как показано здесь: http://www.codeigniter.com/userguide3/database/query_builder.html#resetting-query-builder

Во втором вызове обновления вам нужен url условный? если это так, после того, как вы вызовете первое обновление, что данные больше не доступны для второго. Вам нужно будет снова установить:

 function update($url, $id) { $this->db->where('url', $url); $this->db->update('projects', array('active' => 'n')); $this->db->where('url', $url); $this->db->where('eventid', $id); $this->db->update('tasks', array('active' => 'n')); } // Alternatively function update($url, $id) { $where_bit = array( 'url' => $url, ); $this->db->update('projects', array('active' => 'n'), $where_bit); $where_bit['event_id'] = $id; $this->db->update('tasks', array('active' => 'n'), $where_bit); } 

Обновление активной записи CI поддерживает условие where, которое должно быть передано в виде массива key => value в качестве третьего параметра (также как строка, но id рекомендует использовать массив)

пытаться

 $this->db->reconnect(); 

после вашего запроса.

Добрый день!