在我的 CakePHP (1.2) 应用程序中,我有两个都使用分页的操作 - 索引和搜索。
在上一个问题中,我了解到,为了将阈值分数应用于搜索结果,我需要使用 HAVING
MySQL 关键字。由于 CakePHP 本身不支持此功能,因此我需要下拉到自定义查询才能完成此操作。
我能找到的关于自定义查询分页的所有指南都涉及覆盖 paginate()
和 paginateCount()
方法。
由于我仍然希望能够在索引上正常分页,所以我不想更改模型中的正常分页行为。
有什么办法可以让我(咳咳)吃到我的蛋糕吗?
最佳答案
实际上,如果您可以使用 find 做到这一点,那么您也可以使用 paginate 做到这一点。你可以看看here
但更具体地说,您可以将在查找中使用的条件/限制/字段/包含/顺序等添加到分页功能。
我没有在分页中使用组,但它应该工作 :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['having'] 或记住将其放在不影响查找的地方;)
关于mysql - 我可以在不覆盖默认分页的情况下对自定义查询进行分页吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7569910/