[英]CakePHP - Pagination total count differs from actual count when using DISTINCT
我有一個使用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個不同的行
但是在View中,當我使用時
echo $this->Paginator->param('count'); // returns 12
我得到12分
我檢查了SQL日志,發現計數查詢沒有使用distinct子句。 知道如何覆蓋Paginator計數查詢以使用DISTINCT
子句嗎?
找到解決方案,
在控制器中,將distinct作為數組參數添加到其他分頁選項中。 因此,如果我試圖在我的庫存中一次檢索10輛汽車的汽車列表,那么選項將在fields參數中有一個DISTINCT子句,並且還會添加一個名為distinct的單獨參數,如下所示
$ options = array('conditions'=> $ conditions,'join'=> $ join,'limit'=> 10,'fields'=> array('DISTINCT Car.id','title','user_id') ,'contains'=> array('Dealer'=> array('id'),),'paramType'=>'querystring','distinct'=>'Car.id');
$ this-> Paginator-> settings = $ options; $ cars = $ this-> Paginator-> paginate('Car');
在Model中,使用以下函數覆蓋原始的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 {// regular pagination $ count = $ this-> find('count',array_merge($ parameters,$ extra)); } return $ count; }
View中沒有變化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.