Estoy luchando con Doctrine 2 cuando utilizo HYDRATE_OBJECT
. Cuando cambio de HYDRATE_ARRAY
a HYDRATE_OBJECT
, ¡toma casi 10 veces más! He usado como referencia doctrine 2 and zend paginator:Doctrine 2.2 + Zend Framework optimización de velocidad de paginación
$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
¿Qué debo tener en cuenta? Cómo reducir el tiempo de procesamiento y aún utilizar HYDRATE_OBJECT
? ¿Hay una mejor manera de lograr la paginación?
* Editar: Usando ->setFirstResult($itemsPerPage * $page - $itemPerPage)->setMaxResults($itemsPerPage);
disminuir significativamente el tiempo de carga, pero cuando se utiliza $iterator
:
$adapter = new \Zend_Paginator_Adapter_Iterator($iterator);
$zend_paginator = new \Zend_Paginator($adapter);
$zend_paginator->setItemCountPerPage($itemsPerPage)
->setCurrentPageNumber($page);
Zend sólo conoce $itemsPerPage
, (count($iterator) == $itemsPerPage
) y por lo tanto los enlaces de paginación siempre calculan solamente 1 página. ¿Cómo puedo lograr una paginación apropiada usando Zend_Paginator, y solo cargo las entidades $itemsPerPage
?
¿Ha publicado su código? Es difícil responder a esto sin saber qué tipo de lógica empresarial tiene en sus modelos. –
Sin lógica comercial en entidades excepto -> add() para ArrayCollection. El resto es setters y getters llanos. –
¿No es setMaxResults un problema al usar OneToMany joins? –