Codeigniter数据库查询缓存不使用新数据或删除的数据进行更新

Codeigniter数据库查询缓存不使用新数据或删除的数据进行更新,codeigniter,Codeigniter,当我将新类别添加到数据库时,它将很好地插入。但在添加或删除时不会更新 问题:添加新类别或删除类别后,如何确保codeigniter数据库缓存查询得到正确更新 论坛模式 public function getcategories() { $this->db->cache_on(); // Cache On $query = $this->db->select('*') ->order_by('name', 'asc')

当我将新类别添加到数据库时,它将很好地插入。但在添加或删除时不会更新

问题:添加新类别或删除类别后,如何确保codeigniter数据库缓存查询得到正确更新

论坛模式

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');