如何使用原则 2 和 ZF2 将对象传递给 ORM 分页器


how to pass Object to ORM Paginator Using Doctrine 2 and ZF2

我无法将教义对象传递给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 = new ORMPaginator('pass me DQL'); 需要 Query 来生成分页器。现在如何将教义对象(非 DQL 对象)传递给 ORMPaginator,我无法通过这个?

要实现这一点,您需要同时使用 ORM 分页器和 Zend 分页器

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

您应该首先初始化查询生成器 例如,如果类别是您的实体您可以按以下步骤进行操作

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

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