CakePHP:在使用find方法构建查询时,如何使用"HAVING"操作?

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)

希望它能帮到你