ci框架用active_record模型实现分页的技巧

来源:互联网 发布:linux gpio中断 编辑:程序博客网 时间:2024/06/05 20:26

假设我们有这样的一个日志表,记录了各个事件反生时的时间戳:

CREATE TABLE `logs`(`timestamp` BIGINT,`event` varchar(50))

如果我们要在页面上分页显示出这些事件,假设我们要用ci框架的active_record类实现分页,可能的代码如下:

//根据条件过滤$this->db->select('*')->from('log')            ->where('timestamp>=', $args['begintime'])            ->where('timestamp<=', $args['endtime']);$this->db->limit($args['limit'], $args['start']);$rs = $this->db->get()->result_array();//过滤后的总的记录数$this->db->select('*')->from('log')            ->where('timestamp>=', $args['begintime'])            ->where('timestamp<=', $args['endtime']);$cnt = $this->db->count_all_results();

可以看到,条件过滤的代码写了两次,而且获取总的记录数时,还不能过滤limit,如果条件过滤很长,那冗余的代码就多了,你可能会想到写一个方法,将这些条件过滤的代码放进去,的确,这样也是可行的,不过这里还有一个技巧,请看:

//根据条件过滤$this->db->start_cache();$this->db->select('*')->from('log')            ->where('timestamp>=', $args['begintime'])            ->where('timestamp<=', $args['endtime']);$this->db->limit($args['limit'], $args['start']);$rs = $this->db->get()->result_array();$cnt = $this->db->count_all_results();$this->db->flush_cache();

只要使用active_record的缓存sql即可,方便省事,而且巧在它还不会缓存limit,哈哈



原创粉丝点击