我在使用时遇到了 Doctrine 2 性能问题HYDRATE_OBJECT
。当我从HYDRATE_ARRAY
to HYDRATE_OBJECT
,需要花费近10倍的时间!我用过学说 2 和 zend paginator https://stackoverflow.com/questions/6635194/doctrine-2-and-zend-paginator/9334016#9334016作为参考:
$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
vs
$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
?有没有更好的方法来实现分页?
*Edit: Using ->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
实体?