Por ejemplo, si queremos obtener la sumatoria de una columna numérica, no sólo no necesitamos el objeto, sino que la consulta no generará información para crear uno. La consulta y el getter podrían quedar así:
public function queryValorTotal()
{
$q = Doctrine_Query::create()
->select('SUM(c.valor) AS sum_valor')
->from('NombreClase c');
return $q;
}
public function getValorTotal()
{
return $this->queryValorTotal()->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);
}
En otros casos, aunque la consulta pueda entregar un objeto no necesitamos toda su información sino algunos campos. Entonces podríamos cambiar el hidratador para obtener un array, lo que acelerará la ejecución de la consulta:
$q = $this->queryReporte();
$items = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
Para más información sobre los hidratadores ver la documentación de Doctrine 1.2 "Doctrine ORM for PHP" capítulo 14.