2015-06-05 13 views
5

Pracuję nad projektem cakephp i nowy dla cakephp. Jak wspomniano w tytule, muszę dokonać paginacji zestawu wynikowego zapytania mysql, aby wyświetlić je w widoku.Jak w paginacji wynik zapytania niestandardowego w cakephp

W ten sposób mogę paginować wyniki z modelu "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); 

Potrzebuję również sposób na paginację zestawu wyników w poniższym zapytaniu.

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

Jak mogę dodać paginację?

+0

Proszę sprawdzić, czy odpowiedź przewidziany jest przydatna. Dzięki. –

Odpowiedz

4

CakePHP wykorzystuje dwie metody zarządzania zapytań paginacji, które są paginate i paginateCount, są one wykorzystywane w celu uzyskania danych stron i całkowitą liczbę rekord odpowiednio. Aby dział stronicowania działał z niestandardowymi zapytaniami, będziemy musieli zaimplementować obie powyższe funkcje w naszym pliku modelu, w których chcesz, aby działała z niestandardowymi zapytaniami.

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

wreszcie w akcji kontrolera

// 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

to nie działa z łączeniami, nie sprawdziłem tego przy normalnym zapytaniu. – urfusion

Powiązane problemy