如何为重复查询“重置”CodeIgniter活动记录?

时间:2011-06-05 21:35:30

标签: php 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执行连续更新查询吗?

6 个答案:

答案 0 :(得分:18)

使用

$this->db->start_cache();

开始构建查询和

之前
$this->db->stop_cache();

结束查询构建后。另外,使用

$this->db->flush_cache();

停止缓存后。

答案 1 :(得分:11)

这有效:

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

答案 2 :(得分:9)

在第一次$this->db->reset();电话后尝试拨打update

编辑:是的,请尝试$this->db->_reset_write();清除查询的所有痕迹。

答案 3 :(得分:4)

对于Codeigniter的第3版,正确的方法是:

$this->db->reset_query()

在此处找到:http://www.codeigniter.com/userguide3/database/query_builder.html#resetting-query-builder

答案 4 :(得分:0)

在第二次更新通话中,您是否需要有条件的网址?如果是这样,在您第一次更新后,第二次更新数据不再可用。您需要再次设置:

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作为第3个参数(也作为字符串,但id推荐使用数组)

答案 5 :(得分:0)

尝试

$this->db->reconnect();
查询后

美好的一天!