[英]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.