2013-02-25 10 views
7

Próbuję zaimplementować paginację za pomocą ZF2 i Doctrine.Paginacja za pomocą Doctrine i ZF2

Co próbuję tutaj zrobić, to pobrać dane z powiązanej tabeli, powiedzmy "xyz".

Gdzie mój stolik kategorii robi jedno do wielu samodzielnych odniesień na własnym PK. MY catgories stoły posiada następujące feilds

  • ID (PK)
  • created_at
  • category_id (self odsyłania PK)

Moja tabela XYZ powiedzmy to nazywa Nazwa tabela ma

  • ID (PK)
  • ID_id (FK)
  • nazwa
  • Szczegóły

To, co próbuję zrobić, aby pobrać dane

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

iw moim kontrolera jest to, co robię

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

teraz nie dostaję wyników z zaimplementowaną paginacją, czy niektórzy 1 prowadzą mnie po tym, czego mi brakuje?

Odpowiedz

7

Używasz tam niewłaściwego paginatora. Zamiast tego możesz użyć tego poprzez DoctrineORMModule (patrz DoctrineORMModule\Paginator\Adapter\DoctrinePaginator).

Nie może być bardzo oczywiste, ale logika jest podobny do tego, co już napisałem:

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

Właśnie zmodyfikowano go $ adapter = new DoctrineAdapter (nowa ORMPaginator ($ categoryModel-> allSubcategories ($ category_id, $ column, $ order), true)); $ paginator = new Paginator (adapter $); –

+0

i funkcja publiczna allSubcategories ($ id, $ column, $ order) { $ repository = $ this-> entityManager-> getRepository ('Category \ Entity \ Category'); $ queryBuilder = $ repository-> createQueryBuilder ("category"); $ queryBuilder-> select ("kategoria"); $ queryBuilder-> join ("Kategoria \ Jednostka \ NazwaKategorii", "nazwa kategorii", "Z", "category.id = nazwa kategorii.kategoria"); $ queryBuilder-> orderBy ("category.status"); $ q = $ queryBuilder-> getDql(); $ query = $ this-> entityManager-> createQuery ($ q); $ results = $ query-> getResult(); return $ results; } –

+0

Teraz otrzymuję ten błąd Argument 1 przekazany do Doctrine \\ ORM \\ Narzędzia \\ Pagination \\ Paginator :: cloneQuery() musi być instancją Doctrine \\ ORM \\ Zapytanie, tablica podana jak pokonać ten –

Powiązane problemy