我正在使用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执行连续更新查询吗?
答案 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();
查询后。
美好的一天!