问题是分页器不会将字段传递给find('count')
调用,所以默认情况下它将始终依赖*
.
但即使它会传递字段,传递数组也会使find('count')
调用期望要计数的字段作为COUNT()
表达式,即类似的东西
'fields' => array('COUNT(DISTINCT Doctor.id) as `count`')
然而,这无论如何都不适用于分页器,所以你需要的是一个定制的find('count')
call.
自定义查询分页来救援
See Cookbook > 分页 > 自定义查询分页 http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html#custom-query-pagination了解更多信息。
自定义查询分页可能是您最好的选择,这样计数的方式完全取决于您。
例如,您可以利用分页器组件传递的额外值,这样您就可以将字段传递给 find('count')` 调用,如下所示(未经测试的示例代码):
class Doctor extends AppModel {
// ...
public function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
$parameters = compact('conditions');
if($recursive != $this->recursive) {
$parameters['recursive'] = $recursive;
}
if(!empty($extra['countField'])) {
$parameters['fields'] = $extra['countField'];
unset($extra['countField']);
}
return $this->find('count', array_merge($parameters, $extra));
}
}
$this->Paginator->settings = array(
'limit' => 30,
'fields' => array('DISTINCT Doctor.id','Doctor.*'),
// ...
'countField' => 'DISTINCT Doctor.id'
);
$data = $this->Paginator->paginate('Doctor');
然后这应该创建一个COUNT
查询看起来像
SELECT COUNT(DISTINCT Doctor.id) AS `count` ...