In realtà se PUOI farlo con find puoi farlo con paginate. Puoi dare un'occhiata qui
Ma per essere più precisi puoi aggiungere le condizioni/limite/campi/contenitore/ordine ecc. che usi in trova alla funzione di impaginazione.
Non ho usato il gruppo nella pagina ma DOVREBBE funzionare:D
Nel tuo caso avrai qualcosa del genere:
$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');
Spero che funzioni, pubblica un commento sul tuo risultato, se non funziona dovrai sovrascriverlo, perché non accetta la condizione del gruppo ... anche se penso che funzionerà poiché l'impaginazione è una scoperta alla fine.
MODIFICA:
Puoi provare a fare qualcosa del genere:
Sovrascrivi paginate() e paginateCount() ma con un tweak, nasconde una condizione in modo da poter dire se è una paginazione con avere o meno. Qualcosa del genere:
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
}
Quindi fai qualcosa di simile in paginateCount(), in questo modo hai una paginazione selettiva. ricordati di annullare le $condizioni['avendo'] una volta che non è necessario o ricorda di metterlo da qualche parte che non influisca sulla tua ricerca;)