我正在尝试使用 CakePHP paginate() 方法在 SQL 查询中使用“HAVING”子句。
经过一番搜索,这似乎无法通过 Cake 的 paginate()/find() 方法实现。
我的代码看起来像这样:
$this->paginate = array(
'fields' => $fields,
'conditions' => $conditions,
'recursive' => 1,
'limit' => 10,
'order' => $order,
'group' => 'Venue.id');
$fields 之一是别名“距离”。我想添加一个查询何时距离 < 25(例如 HAVING 距离 < 25)。
到目前为止,我已经看到了两种解决方法,不幸的是,它们都不适合我的需要。我见过的两个是:
1)在“组”选项中添加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() ,因为这会涉及大量返工,也意味着我需要实现自己的分页逻辑!
提前致谢