如何使用Doctrine 2和ZF2将Object传递给ORM Paginator

时间:2013-09-20 15:42:56

标签: php doctrine-orm pagination zend-framework2

我无法将Doctrine对象传递给ORMPaginator函数这里是我代码的代码段

  Doctrine\ORM\Tools\Pagination\Paginator as ORMPaginator;..............

if (count($SearchResults) > 0)
    {
        $ORMPaginator = new ORMPaginator($SearchResults);
    }
    else
    {
        $ORMPaginator = new ORMPaginator($VouchersRepo->createQueryBuilder('vouchers'));
    }

    $Adapter = new DoctrineAdapter($ORMPaginator);
    $Paginator = new Paginator($Adapter);
    $Paginator->setDefaultItemCountPerPage(5);
    $page = (int) $this->params()->fromQuery('page', 1);
    $Paginator->setCurrentPageNumber($page);

显然$ ORMPaginator =新的ORMPaginator('传递给我DQL');需要Query来生成Paginator。现在如何将Doctrine对象(非DQL对象)传递给ORMPaginator我无法通过它?

1 个答案:

答案 0 :(得分:1)

要实现这一点,您需要使用ORM paginator和Zend paginator

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

首先应初始化查询构建器例如,如果category是您的实体 你可以按照以下方式做到这一点

  $repository = $this->entityManager->getRepository('put your entity class here');
  $queryBuilder = $repository->createQueryBuilder('what ever entity you want'); 
  $queryBuilder->select('what ever your want');
  $q = $queryBuilder->getDql();
  $query = $this->entityManager->createQuery($q);    
  $paginator = new ZendPaginator(new PageAdapter(new ORMPaginator($query)));

我记得我从Some SO帖子中学到了这种技术,但在发布此解决方案时我找不到它