7

ZF2 と Doctrine を使用してページネーションを実装しようとしています。

ここでやろうとしているのは、関連付けられたテーブルからデータを取得することです。「xyz」としましょう。

私のカテゴリテーブルは、独自のPKで1対多の自己参照を行っています。私のカテゴリーテーブルには次のフィールドがあります

  • ID(PK)
  • Created_at
  • Category_id (自己参照 PK)

私の XYZ テーブルは、それが名前テーブルと呼ばれているとしましょう

  • ID(PK)
  • Category_id(外部キー)
  • 名前
  • 詳細

これは、データをフェッチするために私がやろうとしていることです

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

現在、ページネーションを実装しても結果が得られません。何が欠けているのか教えてもらえますか?

4

1 に答える 1

8

そこで間違ったページネーターを使用しています。代わりに、1 を使用できます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)));
于 2013-02-25T14:28:15.977 に答える