Как «сбросить» активную запись CodeIgniter для последовательных запросов? - PullRequest
18 голосов
/ 06 июня 2011

Я использую 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?

Ответы [ 6 ]

18 голосов
/ 21 декабря 2011

Используйте

$this->db->start_cache();

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

$this->db->stop_cache();

После завершения построения запроса. Также используйте

$this->db->flush_cache();

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

11 голосов
/ 03 августа 2013

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

$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();
9 голосов
/ 06 июня 2011

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

РЕДАКТИРОВАТЬ: meh, попробуйте $this->db->_reset_write();, чтобы очистить все следы запроса.

4 голосов
/ 17 ноября 2016

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

$this->db->reset_query()

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

0 голосов
/ 30 апреля 2013

попробуйте

$this->db->reconnect();

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

Добрый день!

0 голосов
/ 06 июня 2011

Во втором вызове обновления вам нужен условный 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, которое должно быть передано в виде массива ключа => значение в качестве 3-го параметра (также как строка, но id рекомендует использовать вместо этого массив)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...