sql >> Base de Datos >  >> RDS >> Mysql

¿Puedo paginar una consulta personalizada sin anular la paginación predeterminada?

En realidad, si PUEDES hacerlo con find, PUEDES hacerlo con paginate. Puedes echar un vistazo aquí

Pero para ser más específico, puede agregar las condiciones/límite/campos/contener/ordenar, etc. que usa en buscar a la función de paginación.

No he usado el grupo en la página, pero DEBERÍA funcionar:D

En tu caso tendrás algo como esto:

$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, publique un comentario de su resultado, si no funciona tendrá que anularlo, porque no acepta la condición de grupo... aunque creo que funcionará ya que la paginación es un hallazgo al final.

EDITAR:

Puede intentar hacer algo como esto:

Anule paginate() y paginateCount() pero con un ajuste, extraiga una condición para que pueda saber si es una paginación con tener o no. Algo como esto:

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

}

Luego haces algo similar en paginateCount(), de esa manera tienes una paginación selectiva. recuerda deshacer $condiciones['tener'] una vez que no sea necesario o recuerda ponerlo en algún lugar que no afecte tu búsqueda;)