簡體   English   中英

當查詢具有“不同”時,Zend Paginator顯示錯誤的頁數

[英]Zend Paginator displays wrong page count when query has “distinct”

我在一個項目上使用Zf 1.10,並且已經非常成功地使用Zend_Paginator和Zend_DbTable查詢,直到這一點。

該查詢需要一個DISTINCT關鍵字來刪除由連接創建的重復行,但是當我添加它時,當實際上只有一頁結果時,分頁器錯誤地顯示兩頁結果的導航。 一些挖掘顯示它正在執行兩個查詢,一個用於我追求的結果集(77行),另一個用於獲取計數。 但Zend magic生成的第二個查詢不包含DISTINCT關鍵字,因此計數返回112行而不是77行。

這是相關的一點

$select = $this->select()
    ->setIntegrityCheck(false)
    ->from('companies')
    ->distinct()
    ->join('project_team', 'companies.companyID = project_team.companyID', null)
    ->join('project_team_roles', 'project_team.roleID = project_team_roles.roleID', null)
    ->join('projects', 'projects.projectID = project_team.projectID', null)
    ->where('project_team_roles.isArchitect')
    ->where('companies.companyName LIKE ?', '%' . $str . '%')
    ->where('projects.islive AND NOT projects.isDeleted')
    ->order('companies.companyName'); 
 $adapter = new Zend_Paginator_Adapter_DbTableSelect($select);
 $paginator = new Zend_Paginator($adapter);
 $paginator->setCurrentPageNumber($page);
 $paginator->setItemCountPerPage(100);
 return $paginator;

除了忽略count查詢中的DISTINCT子句之外,它生成的查詢沒有任何問題。 如果刪除 - > distinct()位,那么一切都很好 - 112行和分頁都是超級的,除了數據有重復的行。

我看到錯誤報告在類似問題上得到了公平的回應,但它們在早期版本的ZF中被標記為已修復

這是一個眾所周知的問題嗎? 如果不寫自己的分頁,我能做些什么嗎? 寫作分頁並不是特別具有挑戰性,但這意味着這一點與項目的其他部分不一致

非常感謝

伊恩

編輯 - 找到一個解決方法,發布如下的答案。

這是很久以前的問題,但它仍然需要一個答案。

您應該在控制器中使用setRowCount()方法。

$select = $your_model->getSelect();
$select_count = $your_model->getCount(); // geting count from select above
$adapter = new Zend_Paginator_Adapter_DbSelect($select);
$adapter->setRowCount((int)trim($select_count)); // <-- // set integer !
$paginator = new Zend_Paginator($adapter);
// That's it
...

$this->view->paginator = $paginator; 
// and so on...

找到一個簡單的解決方法...不要使用DbTable適配器,但將結果導入數組,然后將其傳遞給分頁器

$results = $this->fetchAll($select)->toArray(); 
$adapter = new Zend_Paginator_Adapter_Array($results);

看起來只有DbTable有這個bug。

祝你好運!

暫無
暫無

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

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