2013-02-25 24 views
7

tôi đang cố triển khai Phân trang bằng cách sử dụng ZF2 và Doctrine.Phân trang bằng cách sử dụng Doctrine và ZF2

Điều tôi đang cố gắng làm ở đây là tìm nạp dữ liệu từ bảng được liên kết cho phép nói 'xyz'.

Trong trường hợp bảng danh mục của tôi đang thực hiện một đến nhiều lần tự tham chiếu trên PK của chính nó. bảng catgories MY đã feilds

  • ID sau (PK)
  • created_at
  • category_id (tự tham khảo PK)

bảng XYZ của tôi cho phép nói nó được gọi là bảng danh có

  • ID (PK)
  • Category_id (FK)
  • tên
  • chi tiết

Đây là những gì tôi đang cố gắng làm để lấy dữ liệu

 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); 
} 

Và trong điều khiển của tôi đây là những gì tôi đang làm

 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); 
} 

Bây giờ tôi không nhận được kết quả với pagination thực hiện có thể một số 1 hướng dẫn tôi về những gì tôi đang mất tích?

Trả lời

7

Bạn đang sử dụng sai trình tạo trang ở đó. Thay vào đó, bạn có thể sử dụng một bằng cách DoctrineORMModule (xem DoctrineORMModule\Paginator\Adapter\DoctrinePaginator).

Nó có thể không phải rất rõ ràng, nhưng logic tương tự như những gì bạn đã viết:

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

tôi chỉ cần sửa đổi nó để $ adaptor = new DoctrineAdapter (ORMPaginator mới ($ categoryModel-> allSubcategories ($ category_id, $ column, $ order), true)); $ paginator = new Paginator ($ adapter); –

+0

và allSubcategories chức năng công cộng ($ id, $ column, $ order) { $ repository = $ this-> entityManager-> getRepository ('Danh mục \ Pháp nhân \ Danh mục'); $ queryBuilder = $ repository-> createQueryBuilder ('danh mục'); $ 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(); trả lại kết quả $; } –

+0

Bây giờ tôi nhận được lỗi này Đối số 1 được chuyển đến Doctrine \\ ORM \\ Công cụ \\ Pagination \\ Paginator :: cloneQuery() phải là một cá thể của Doctrine \\ ORM \\ Query, mảng được đưa ra cách khắc phục này –

Các vấn đề liên quan