A ver, estas confundido, Hydrate es el proceso de transformar una instancia de Doctrine_Query en un set de datos, ya sea un grafo de objetos o un array que represente el grafo.
Hay varios tipos de data hydrators, los mas utilizados son:
- HYDRATE_OBJECT
- HYDRATE_ARRAY
- HYDRATE_SCALAR
- HYDRATE_SINGLE_SCLALAR
El tipo por defecto es HYDRATE_OBJECT, este carga los datos con modelos/clases existentes, con el costo que esto tiene, hay que instanciar y setear datos, es por esto la recomendación de utilizar HYDRATE_ARRAY cuando no haya lógica alguna, por ejemplo, si estas trabajando con ordenes y productos, lo mas probable es que quieras aplicar algún descuento por cantidad, calcular el envio, etc..., en este caso tiene sentido HYDRATE_OBJECT, ahora si voy a mostrar las últimas 10 noticias del blog, para que quiero objetos ?, si no voy a hacer calculo alguno, es mejor opción HYDRATE_ARRAY.
Lo que debe quedar claro es que siempre se hace el hydrate lo que cambia es el tipo de hydrator y este se puede especificar en el DQL, un ejemplo(con D2):
Código PHP:
Ver original//as Object
$query = $em->createQuery('SELECT u FROM User u');
$users = $query->getResult(Query::HYDRATE_OBJECT);
//as Array
$query = $em->createQuery('SELECT u FROM User u');
$users = $query->getResult(Query::HYDRATE_ARRAY);
//or shortcut
$users = $query->getArrayResult();
Talves en base a esto puedas re formular alguna de tus preguntas.
Saludos.