Właściwie, jeśli MOŻESZ to zrobić za pomocą strony, MOŻESZ to zrobić za pomocą stronicowania. Możesz zajrzeć tutaj
Ale aby być bardziej konkretnym, możesz dodać warunki/limity/pola/zawieranie/zamówienie itp., których używasz w funkcji find, do funkcji stronicowania.
Nie używam grupy w paginacji, ale POWINNO działać :D
W twoim przypadku będziesz mieć coś takiego:
$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');
Mam nadzieję, że to zadziała, opublikuj komentarz swojego wyniku, jeśli nie zadziała, będziesz musiał go pominąć, ponieważ nie akceptuje warunku grupy ... chociaż myślę, że zadziała, ponieważ stronicowanie jest w końcu znaleziskiem.
EDYCJA:
Możesz spróbować zrobić coś takiego:
Zastąp paginate() i paginateCount(), ale z poprawką, przemykaj warunek, abyś mógł stwierdzić, czy jest to paginacja z posiadaniem, czy nie. Coś takiego:
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
}
Następnie robisz coś podobnego w paginateCount(), w ten sposób masz selektywną paginację. pamiętaj, aby usunąć $conditions['having'], gdy nie jest to potrzebne lub pamiętaj, aby umieścić je w miejscu, które nie ma wpływu na twoje znalezisko;)