Оптимизация скорости разбивки по страницам в Doctrine 2.2 + Zend Framework

Я пытаюсь работать с Doctrine 2 при использовании HYDRATE_OBJECT . Когда я переключаюсь с HYDRATE_ARRAY на HYDRATE_OBJECT , он занимает почти 10 раз дольше! Я использовал доктрину 2 и zend paginator в качестве ссылки:

 $query = $em->createQuery($dql) ->setHydrationMode(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY) ->setParameter('x', 1); // Pagination $paginator = new Doctrine\ORM\Tools\Pagination\Paginator($query, false); $iterator = $paginator->getIterator(); die(); // 160 ms 

против

 $query = $em->createQuery($dql) ->setHydrationMode(\Doctrine\ORM\AbstractQuery::HYDRATE_OBJECT) ->setParameter('x', 1); // Pagination $paginator = new Doctrine\ORM\Tools\Pagination\Paginator($query, false); $iterator = $paginator->getIterator(); die(); // 1.4s 

О чем я должен следить? Как сократить время обработки и использовать HYDRATE_OBJECT ? Есть ли лучший способ выполнить разбиение на страницы?

* Изменить : Использование ->setFirstResult($itemsPerPage * $page - $itemPerPage)->setMaxResults($itemsPerPage); значительно уменьшают время загрузки, но при использовании $iterator :

 $adapter = new \Zend_Paginator_Adapter_Iterator($iterator); $zend_paginator = new \Zend_Paginator($adapter); $zend_paginator->setItemCountPerPage($itemsPerPage) ->setCurrentPageNumber($page); 

Zend знает только о $itemsPerPage , ( count($iterator) == $itemsPerPage ), и поэтому ссылки на страницы всегда вычисляют только count($iterator) == $itemsPerPage страницу. Как я могу выполнить правильную разбивку на страницы с помощью Zend_Paginator и загружать только $itemsPerPage ?

Я решил это сейчас, создав обертку адаптера для привязки Zend для разбивки на страницы Doctrine;

 <?php class PaginatorAdapter extends Doctrine\ORM\Tools\Pagination\Paginator implements Zend_Paginator_Adapter_Interface { public function getItems($offset, $itemCountPerPage) { $this->getQuery()->setFirstResult($offset)->setMaxResults($itemCountPerPage); return $this->getQuery()->getResult($this->getQuery()->getHydrationMode()); } }