На самом деле, если вы можете сделать это с помощью поиска, вы можете сделать это с помощью пагинации.Вы можете посмотреть здесь
Но чтобы быть более конкретным, вы можете добавить условия / limit / fields / contains / order и т. Д., Которые вы используете в find, к функции paginate.
Я не использую группу в 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.не забывайте делать неустановленные $ условия ['имеющие'], когда это не нужно, или не забудьте поместить его где-нибудь, что не повлияет на вашу находку;)