Всъщност, ако МОЖЕТЕ да го направите с find, МОЖЕТЕ да го направите с paginate. Можете да разгледате тук
Но за да бъдете по-конкретни, можете да добавите условия/лимит/полета/съдържат/поръчка и т.н., които използвате при find, към функцията за разделяне на страници.
Не съм използвал group в paginate, но ТРЯБВА да работи :D
Във вашия случай ще имате нещо подобно:
$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');
Надяваме се, че работи, публикувайте коментар за вашия резултат, ако не работи, ще трябва да го замените, защото не приема груповото условие... въпреки че мисля, че ще работи, тъй като в крайна сметка пагинацията е находка.
РЕДАКТИРАНЕ:
Може да опитате да направите нещо подобно:
Отменете paginate() и paginateCount(), но с настройка, промъкнете условие, за да можете да разберете дали е пагинация с наличието или не. Нещо като това:
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
}
След това правите нещо подобно в paginateCount(), по този начин имате селективно paginate. не забравяйте да направите unset $conditions['having'], след като не е необходимо или не забравяйте да го поставите някъде, което не влияе на вашето намиране;)