我有一个使用DISTINCT子句从我的模型中获取结果的find方法。 Controller代码如下所示
$options = array(
'limit' => 10,
'fields' => array(
'DISTINCT id', 'title',
),
'contain' => array(
'Dealer' => array('id'),
),
'paramType' => 'querystring'
);
$this->Paginator->settings = $options;
$cars = $this->Paginator->paginate('Car'); // returns 6 distinct rows
上述查询返回6个不同的行和12个总行。因此,当我显示时,屏幕显示6个不同的行
但在视图中,当我使用
时echo $this->Paginator->param('count'); // returns 12
我算了12个
我检查了SQL日志,发现计数查询没有使用distinct子句。知道如何覆盖Paginator计数查询以使用DISTINCT
子句吗?
答案 0 :(得分:0)
找到解决方案,
在控制器中,将distinct作为数组参数添加到其他分页选项中。因此,如果我试图在我的库存中一次检索10辆汽车的汽车列表,那么选项将在fields参数中有一个DISTINCT子句,并且还会添加一个名为distinct的单独参数,如下所示
$ options = array( 'conditions'=> $条件, 'joins'=> $连接, 'limit'=> 10, 'fields'=>阵列( 'DISTINCT Car.id','title','user_id'), 'contains'=>阵列( '经销商'=>阵列( 'ID'), ) 'paramType'=> '请求参数', 'distinct'=> 'Car.id' );
$ this-> Paginator-> settings = $ options; $ cars = $ this-> Paginator-> paginate('Car');
在模型中,使用以下函数覆盖原始paginateCount
方法
public function paginateCount($ conditions = null,$ recursive = 0,$ extra = array()){ $ parameters = compact('conditions','recursive'); if(isset($ extra ['distinct'])){ $ parameters ['fields'] ='DISTINCT'。 $额外[ '不同']; $ count = $ this-> find('count',array_merge($ parameters,$ extra)); } else { //定期分页 $ count = $ this-> find('count',array_merge($ parameters,$ extra)); } 返回$ count; }
视图