簡體   English   中英

CakePHP - 使用DISTINCT時,分頁總計數與實際計數不同

[英]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子句嗎?

找到解決方案,

  1. 在控制器中,將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');

  2. 在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; }

  3. View中沒有變化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM