更好的分页方式

时间:2015-09-29 11:20:52

标签: codeigniter

如果我想进行分页,我必须两次获取数据,一个用于获取总行数,一个用于获取具有限制的行,例如

<?php

class Admins extends CI_Model
{
    public function dataTotal()
    {
        $total = $this->db->get('admins')->num_rows();

        return  $total;
    }

    public function data()
    {
        return $this->db->limit(10, $this->start)->get('admins')->result();
    }
}

然后将总数分配给分页并分配数据进行查看,这很有意义,但如果有很多条件,我需要做两次,例如:

<?php

class Admins extends CI_Model
{
    public function dataTotal()
    {
        $db = $this->db->from('admins')
                ->where('id >', 1)
                ->like('name', 'abc', 'both');

        return $db->get()->num_rows();
    }

    public function data()
    {
        $data = $this->db->from('admins')
                ->where('id >', 1)
                ->like('name', 'abc', 'both')
                ->limit(10, $this->start);

        return $data->get()->result();
    }
}

更多条件意味着更多重复的代码,任何使条件过滤器成为一个的方法?

1 个答案:

答案 0 :(得分:0)

您可以创建一个函数并使用SQL查询作为参数,这是最推荐的选项。如果这不是一个选项,你可以做这样的事情:

public function data($option = "default")
{
    if($option == 'default')
    {
        $data = $this->db->from('admins')
            ->where('id >', 1)
            ->like('name', 'abc', 'both')
    }
    else if($option == 'other')
    {
        $data = $this->db->from('admins')
            ->where('id >', 1)
            ->like('name', 'abc', 'both')
            ->limit(10, $this->start);
    }

    return $data->get()->result();
}

然后称之为:

data();
data("other");

这是我能提出的最有效的方式。