2013-02-25 34 views
7

我正在嘗試使用ZF2和Doctrine來實現分頁。使用Doctrine和ZF2的分頁

我在這裏要做的是從關聯表中獲取數據可以說'xyz'。

在哪裏作爲我的分類表正在做自己的PK一對多的自我引用。 MY catgories表有以下精密組件

  • ID(PK)
  • Created_at
  • CATEGORY_ID(自參照PK)

我的XYZ表讓說,它被稱爲名稱表有

  • ID(PK)
  • Category_id(FK)
  • 詳細

這就是我要做的獲取數據

 public function allSubcategories($id, $column, $order) { 
$repository = $this->entityManager->getRepository('Category\Entity\Category'); 
    $queryBuilder = $repository->createQueryBuilder('category'); 
    $queryBuilder->distinct(); 
    $queryBuilder->select('category'); 

    $queryBuilder->join('Category\Entity\CategoryName', 'category_name', 'WITH', 'category.id = category_name.category'); 
    $queryBuilder->orderBy("category.status"); 
    $q = $queryBuilder->getDql(); 
    return $query = $this->entityManager->createQuery($q); 
} 

而在我的控制,這是我在做什麼

 public function subcategoryAction() { 

    ///////////////////////////InPut Params Given for the pagination 
    $category_id = (int) $this->params()->fromRoute('id', 0); 
    $page = (int) $this->params()->fromRoute('page', 0); 
    $column = $this->params()->fromQuery('column'); 
    $order = $this->params()->fromQuery('order'); 



    $categoryModel = $this->getServiceLocator()->get('Category'); 
    $categoryModel->category = $category_id; 


    $perPage = 10; 
    $request = $this->getRequest(); 
    if ($request->isGet()) { 
     $view = new ViewModel(); 
     $query = $categoryModel->allSubcategories($category_id, $column, $order); 

     $paginator = new ORMPaginator($query); 

     $paginator = new \Zend\Paginator\Paginator(new 
         \Zend\Paginator\Adapter\ArrayAdapter(array($paginator))); 
     $paginator->setCurrentPageNumber($page); 
     $paginator->setItemCountPerPage(2); 

    } 

    return array('id' => $category_id, 'view' => $paginator); 
} 

現在我沒有得到結果與分頁執行可以一些指導我關於我失蹤?

回答

7

您在那裏使用了錯誤的paginator。相反,您可以使用DoctrineORMModule之一(請參閱DoctrineORMModule\Paginator\Adapter\DoctrinePaginator)。

它可能不是很明顯,但邏輯類似於你已經寫道:

use DoctrineORMModule\Paginator\Adapter\DoctrinePaginator as PaginatorAdapter; 
use Doctrine\ORM\Tools\Pagination\Paginator as ORMPaginator; 
use Zend\Paginator\Paginator as ZendPaginator; 

$query = $categoryModel->allSubcategories($category_id, $column, $order); 

$paginator = new ZendPaginator(new PaginatorAdapter(new ORMPaginator($query))); 
+0

我只是把它修飾成 $適配器=新DoctrineAdapter(新ORMPaginator($ categoryModel-> allSubcategories($ category_id,$ column,$ order),true)); $ paginator = new Paginator($ adapter); – 2013-02-25 14:50:22

+0

和公共函數allSubcategories($ id,$ column,$ order){ $ repository = $ this-> entityManager-> getRepository('Category \ Entity \ Category'); $ queryBuilder = $ repository-> createQueryBuilder('category'); $ queryBuilder-> select('category'); $ queryBuilder-> join('Category \ Entity \ CategoryName','category_name','WITH','category.id = category_name.category'); $ queryBuilder-> orderBy(「category.status」); $ q = $ queryBuilder-> getDql(); $ query = $ this-> entityManager-> createQuery($ q); $ results = $ query-> getResult(); return $ results; } – 2013-02-25 14:51:06

+0

現在我得到這個錯誤參數1傳遞給Doctrine \\ ORM \\ Tools \\ Pagination \\ Paginator :: cloneQuery()必須是Doctrine \\ ORM \\ Query的一個實例,給出的數組爲 如何克服這個 – 2013-02-25 14:52:02