2015-06-05 11 views
5

Sto lavorando a un progetto cakephp e nuovo a cakephp. Come menzionato nel titolo, ho bisogno di impaginare il set di risultati di una query mysql per visualizzarli in una vista.Come impaginare il risultato di una query personalizzata in cakephp

In questo modo posso impaginare i risultati dal modello "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); 

E ho bisogno di un modo per impaginare anche il set di risultati della query sottostante.

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

come è possibile aggiungere l'impaginazione?

+0

Si prega di verificare la risposta fornita se sia utile. Grazie. –

risposta

4

CakePHP utilizza due metodo per gestire le query di paginazione, che sono paginate e paginateCount, essi sono utilizzati per ottenere, rispettivamente, i dati di pagina e conteggio totale di record. Per fare in modo che la paginazione funzioni con le query personalizzate, sarà necessario implementare entrambe le funzioni sopra riportate nel nostro file modello in cui si desidera che l'impaginazione funzioni con query personalizzate.

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

Poi finalmente in azione di controllo

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

questo non funziona con i join, non l'ho verificato con la query normale. – urfusion