2015-09-29 54 views
1

如果我想要做的分頁,我不得不兩次取數據,一個用於獲得總行,一個用於獲取與限行,例如更好的辦法

<?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(); 
    } 
} 

更多條件意味着更多的重複代碼,任何方式,使條件過濾爲一體?

回答

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

這是最有效的方式,我可以拿出。