使用原则和ZF2进行分页 [英] Pagination using Doctrine and ZF2

查看:112
本文介绍了使用原则和ZF2进行分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我想在这里做的是从相关表中获取数据,让我们说'xyz'。



我的类别表在自己的PK上进行一对多的自引用。
我的收藏表有以下feilds




  • ID(PK)

  • Created_at

  • Category_id(自引用PK)



我的XYZ表让我们说它被称为名称表有




  • ID(PK)

  • Category_id(FK)

  • 名称

  • 细节



这是我正在为提取数据而做的事情<公共函数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给定分页
$ 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);

}

返回数组('id'=> $ category_id,'view'=> $ paginator);
}

现在我没有得到结果与分页执行可以有一些指导我关于什么我缺少?

解决方案

你在这里使用错误的分页。相反,您可以使用 DoctrineORMModule (请参阅 DoctrineORMModule\\ \\ Paginator\Adapter\DoctrinePaginator )。



可能不是很明显,但逻辑类似于你已经写过:

 使用DoctrineORMModule\Paginator\Adapter\DoctrinePaginator作为PaginatorAdapter; 
使用Doctrine\ORM\Tools\Pagination\Paginator作为ORMPaginator;
使用Zend\Paginator\Paginator作为ZendPaginator;

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

$ paginator = new ZendPaginator(new PaginatorAdapter(new ORPaginator($ query)));


i am trying to implement Pagination Using ZF2 and Doctrine.

What i am trying to do here is to fetch data from An associated table lets say 'xyz'.

Where as my categories table is doing one to many self referencing on its own PK. MY catgories tables has following feilds

  • ID (PK)
  • Created_at
  • Category_id (self referencing PK)

My XYZ table lets say it is called Name table has

  • ID (PK)
  • Category_id(FK)
  • name
  • Detail

This is what i am trying to do to fetch data

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

And in my controller this is what i am doing

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

Now i am not getting results with pagination implemented can some 1 guide me about what i am missing?

解决方案

You are using the wrong paginator there. Instead, you can use the one by DoctrineORMModule ( see DoctrineORMModule\Paginator\Adapter\DoctrinePaginator).

It may not be very obvious, but the logic is similar to what you already wrote:

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

这篇关于使用原则和ZF2进行分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆