Подтвердить что ты не робот

Как "reset" активная запись 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?

4b9b3361

Ответ 1

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

$this->db->start_cache();

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

$this->db->stop_cache();

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

$this->db->flush_cache();

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 5

Во втором вызове обновления вам нужен 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 рекомендует использовать массив)

Ответ 6

попробуйте

$this->db->reconnect();

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

Добрый день!