Zf2 Pagination 获取所有记录

Zf2 Pagination fetches all records

我实现了 zf2 分页器。但是现在随着数据的增加,我意识到它首先获取所有记录,然后进行分页,这需要更多时间。直到记录超过1k我才意识到速度问题。

分页器真的是这样工作的吗,还是我的代码遗漏了什么?

$photos = $em->getRepository('User\Entity\MyEntity')->findBy(array('id' => $main_id, 'status' => '1', 'is_primary' => '1'));

/** Create Paginator * */
$paginator = new \Zend\Paginator\Paginator(new
                \Zend\Paginator\Adapter\ArrayAdapter($photos)
             );

if (isset($data['pg_id'])) {
      $paginator->setCurrentPageNumber($data['pg_id']);
} else {
      $paginator->setCurrentPageNumber(1);
}
$paginator->setDefaultItemCountPerPage(25);

正如@foozy 在评论中提到的,Doctrine 为此目的为 ZF2 提供了分页器适配器。您可以使用 the Selectable adapter from DoctrineModule directly or the DoctrinePaginator class from DoctrineORMModule. The latter doesn't have it's own documentation but this blog post from Loft Digital explains it well:

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

// .......

$entityManager = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
$repository = $entityManager->getRepository('Admin\Entity\SystemUser');
$adapter = new DoctrineAdapter(new ORMPaginator($repository->createQueryBuilder('user')));
$paginator = new Paginator($adapter);

// .......