Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Posso paginar uma consulta personalizada sem substituir a paginação padrão?


Na verdade, se você PODE fazer isso com o find, você PODE fazer com o paginate. Você pode dar uma olhada aqui

Mas para ser mais específico, você pode adicionar as condições/limite/campos/contain/ordem etc que você usa em find à função paginate.

Eu não usei o grupo no paginate, mas DEVE funcionar :D

No seu caso você terá algo assim:
$this->paginate = array(
   'fields' => array(
        'Product.category_id',
        'COUNT(Product.hotel_id) as total'
    ),
   'group' => array(
        'Product.category_id HAVING COUNT(Product.hotel_id) > 1')
    )
);

$data = $this->paginate('Product');

Espero que funcione, poste um comentário do seu resultado, se não funcionar você terá que sobrescrever, pois não está aceitando a condição do grupo...

EDITAR:

Você pode tentar fazer algo assim:

Substitua paginate() e paginateCount(), mas com um ajuste, esgueire uma condição para que você possa dizer se é uma paginação com ou não. Algo assim:
function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()){
   //if no having conditions set return the parent paginate 
   if (empty($conditions['having'])
       return parent::paginate($conditions, $fields, $order, $limit, $page, $recursive, $extra)
   //if having conditions set return your override

//override code here

}

Então você faz algo semelhante em paginateCount(), dessa forma você tem uma paginação seletiva. lembre-se de fazer $conditions['have'] quando não for necessário ou lembre-se de colocá-lo em algum lugar que não afete sua descoberta;)