2015-06-05 15 views
5

Tôi đang làm việc trên dự án cakephp và mới cho cakephp. Như đã đề cập trong tiêu đề, tôi cần phải phân trang kết quả tập hợp truy vấn mysql để hiển thị chúng trong một khung nhìn.Cách phân trang kết quả truy vấn tùy chỉnh trong cakephp

Bằng cách này, tôi có thể phân trang kết quả từ mô hình "Asin".

$this->paginate =array('Asin'=>array(
      'fields' => array('sku','fnsku'), 
      'conditions' => $marketplace, 
      'page' => 1, 'limit' => 20, 
      'order' => array('Asin.asin' => 'asc') 
     ) 
$data = $this->paginate('Asin',$criteria); 

Và tôi cũng cần cách phân trang tập hợp kết quả của truy vấn bên dưới.

$resultset = $this->Asin->query("SELECT * FROM products INNER JOIN asins ON products.id=asins.id ORDER BY products.id"); 

làm cách nào để thêm phân trang?

+0

Vui lòng kiểm tra câu trả lời cung cấp cho dù đó là hữu ích. Cảm ơn. –

Trả lời

4

CakePHP sử dụng hai phương pháp để quản lý truy vấn pagination, đó là paginate và paginateCount, chúng được sử dụng để lấy dữ liệu trang và tổng số kỷ lục tương ứng. Để có phân trang hoạt động với các truy vấn tùy chỉnh của bạn, chúng tôi sẽ cần triển khai cả hai hàm trên trong tệp mô hình của chúng tôi nơi bạn muốn có phân trang để làm việc với các truy vấn tùy chỉnh.

public function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) {  
    $recursive = -1; 

    // Mandatory to have 
    $this->useTable = false; 
    $sql = ''; 

    $sql .= "Your custom query here just do not include limit portion"; 

    // Adding LIMIT Clause 
    $sql .= (($page - 1) * $limit) . ', ' . $limit; 

    $results = $this->query($sql); 

    return $results; 
} 

....

public function paginateCount($conditions = null, $recursive = 0, $extra = array()) { 

    $sql = ''; 

    $sql .= "Your custom query here just do not include limit portion"; 

    $this->recursive = $recursive; 

    $results = $this->query($sql); 

    return count($results); 
} 

Rồi cuối cùng trong hành động điều khiển

// Do not forgot to set this, not sure why 
$this->Asin->recursive = 0; 

// Setting up paging parameters 
$this->paginate = array('Asin'=>array('limit'=>5)); 

// Getting paginated result based on page # 
$this->set('userData', $this->paginate('Asin')); 
+0

điều này không hoạt động với các kết nối, tôi không kiểm tra với truy vấn bình thường. – urfusion

Các vấn đề liên quan