Search code examples
phpcodeignitercodeigniter-4

How to paginate using query builder class in codeigniter 4


I'm doing project with CI v4.0.4. I like using query builder but I find difficult to paginate data from db. When I run it I get error **Call to undefined method CodeIgniter\Database\MySQLi\Result::paginate() **. How can I use query builder class to paginate with model and controller methods.

    //my model
    public function getData($page=0,$perPage=100){
        $builder = $this->db->table('categories')->paginate(5);
        return $builder;
    }

    //my controller
        public function index()
    {
        $pager=service('pager');
        $page=(int)(($this->request->getVar('page')!==null)?$this->request->getVar('page') : 1)-1; 

        $data = [
            'results' => $this->model->getData($page),
            'pager'  => $pager
        ];
        return view('test', $data);
    }

Solution

  • Model base pagination

    public function getWithRelations($perPage=10)
    {
        $pager = service('pager');
        $page = (@$_GET['page']) ? $_GET['page'] : 1;
        $this->db->connect();
        $offset = ($page-1) * $perPage;
    
        $builder = $this->db->table('db_tab1 as t1');
        $data = $builder
            ->where('col','val')
            ->select('t1.*,t2.name as t2_name')
            ->join('db_tab2 as t2','t2.t1 = t1.id')
            ->orderBy('t1.id', 'DESC')
            ->get($perPage,$offset)
            ->getResult();
    
        $total = $builder->where('col','val')->countAllResults();
    
        return [
            'data'=>$data,
            'links' => $pager->makeLinks($page,$perPage,$total)
        ];
    }