实际上,如果您可以使用 find 来做到这一点,那么您可以使用 paginate 来做到这一点。你可以看看这里
但更具体一点,您可以将在 find 中使用的条件/限制/字段/包含/订单等添加到分页功能。
我没有在分页中使用组,但它应该可以工作: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() 中做类似的事情,这样你就有一个选择性的分页。记住在不需要时执行 unset $conditions['have'] 或记住将其放在不影响您查找的地方;)