Codeigniter数据库查询缓存不使用新数据或删除的数据进行更新
当我将新类别添加到数据库时,它将很好地插入。但在添加或删除时不会更新 问题:添加新类别或删除类别后,如何确保codeigniter数据库缓存查询得到正确更新 论坛模式Codeigniter数据库查询缓存不使用新数据或删除的数据进行更新,codeigniter,Codeigniter,当我将新类别添加到数据库时,它将很好地插入。但在添加或删除时不会更新 问题:添加新类别或删除类别后,如何确保codeigniter数据库缓存查询得到正确更新 论坛模式 public function getcategories() { $this->db->cache_on(); // Cache On $query = $this->db->select('*') ->order_by('name', 'asc')
public function getcategories() {
$this->db->cache_on(); // Cache On
$query = $this->db->select('*')
->order_by('name', 'asc')
->from('forum')
->get();
if ($query->num_rows() > 0) {
return $query->result_array();
} else {
return array();
}
}
public function add() {
$this->db->trans_start();
$this->db->trans_strict(FALSE);
$insert = array(
'name' => $this->input->post('title'),
'type' => $this->input->post('type'),
'pid' => $this->input->post('pid')
);
$this->db->insert($this->db->dbprefix . 'forum', $insert);
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE) {
$this->db->trans_rollback();
return FALSE;
} else {
$this->db->trans_commit();
return TRUE;
}
}
public function categories_for_deletion($fid) {
$this->db->where('fid', $fid);
$this->db->or_where('pid', $fid);
$query = $this->db->delete('forum');
$this->db->cache_delete('admin', 'category');
if ($query) {
return TRUE;
} else {
return FALSE;
}
}
控制器
<?php
class Category extends MX_Controller {
public function __construct() {
parent::__construct();
$this->load->library('form_validation');
$this->load->library('forum');
$this->load->model('admin/forum/forum_model');
}
public function add() {
$this->form_validation->set_rules('title', 'title', 'required');
if ($this->form_validation->run() == TRUE) {
$this->forum_model->add();
redirect('admin/category');
}
$data['header'] = Modules::run('admin/common/header/index');
$data['footer'] = Modules::run('admin/common/footer/index');
$data['categories'] = $this->forum->generate_select();
$this->load->view('template/forums/category_add_view', $data);
}
public function edit($fid) {
$this->form_validation->set_rules('title', 'title', 'required');
if ($this->form_validation->run() == TRUE) {
}
$data['header'] = Modules::run('admin/common/header/index');
$data['footer'] = Modules::run('admin/common/footer/index');
$this->load->view('template/forums/category_edit_view', $data);
}
public function delete($fid) {
$delete = $this->forum_model->categories_for_deletion($fid);
if ($delete == TRUE) {
redirect('admin/category');
}
$this->index();
}
public function index() {
$data['categories'] = '';
if ($this->forum_model->getcategories()) {
$data['categories'] = $this->forum->set_categories_list($this->forum_model->getcategories());
}
$data['header'] = Modules::run('admin/common/header/index');
$data['navbar'] = Modules::run('admin/common/navbar/index');
$data['footer'] = Modules::run('admin/common/footer/index');
$this->load->view('template/forums/category_view', $data);
}
}
如前所述,查询既不会更新,也不会自动过期或在任何持续时间后过期。您必须手动执行,但它不需要cron作业或任何东西。Codeigniter有一种方法
每次更新后,您都必须执行以下操作:
$this->db->cache_delete('controller', 'method');
如果不传递任何参数,它将使用当前URI删除关联的缓存。查询完成后,将再次添加缓存,从而产生更新效果
参考资料:它是像查询缓存(模式缓存)一样工作还是只像数据缓存一样工作?我仔细阅读了文档,知道缓存文件不会更新/过期。你需要明确地去做。我也尝试过同样的事情,我也经历过。因此,我引入了一个cron作业,在间隔之后手动删除缓存文件。我知道运行cron作业不是个好主意,但当时我没有任何其他选择。@kishor10d感谢您提供的信息,我将不再使用codeigniter数据库查询缓存,
$this->db->cache_delete('controller', 'method');