我在使用HYDRATE_OBJECT
. 当我从 切换HYDRATE_ARRAY
到 时HYDRATE_OBJECT
,它需要将近 10 倍的时间!我使用了学说 2 和 zend 分页器作为参考:
$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
) ,因此分页链接总是只计算 1 页。如何使用 Zend_Paginator 完成正确的分页,并且只加载$itemsPerPage
实体?