cow*_*wls 20 mysql cakephp cakephp-2.x
我正在尝试使用CakePHP paginate()方法在SQL查询中使用"HAVING"子句.
经过一些搜索,看起来这是无法通过Cake的paginate()/ find()方法实现的.
我的代码看起来像这样:
$this->paginate = array(
'fields' => $fields,
'conditions' => $conditions,
'recursive' => 1,
'limit' => 10,
'order' => $order,
'group' => 'Venue.id');
Run Code Online (Sandbox Code Playgroud)
其中一个$字段是别名"distance".我想在距离<25时添加查询(例如,距离<25).
到目前为止,我已经看到了两个解决方法,不幸的是,这两个方法都不适合我 我见过的两个是:
1)在"group"选项中添加HAVING子句.例如'group' => 'Venue.id HAVING distance < 25'.当与分页结合使用时,这似乎不起作用,因为它会混淆执行的初始计数查询.(即尝试SELECT distinct(Venue.id HAVING distance < 25)哪个显然是无效的语法.
2)在WHERE条件之后添加HAVING子句(例如WHERE 1 = 1 HAVING field > 25)这不起作用,因为看起来HAVING子句必须在 Cake生成的查询中的WHERE条件之后放置的组语句之后.
有没有人知道使用CakePHP的find()方法做到这一点的方法?我不想使用query(),因为这会涉及大量的返工,也意味着我需要实现自己的分页逻辑!
提前致谢
api*_*i55 36
你必须把它与组条件.像这样
$this->find('all', array(
'conditions' => array(
'Post.length >=' => 100
),
'fields' => array(
'Author.id', 'COUNT(*) as Total'
),
'group' => array(
'Total HAVING Total > 10'
)
));
Run Code Online (Sandbox Code Playgroud)
希望它能帮到你