He leído sobre la hidratación en la documentación de la doctrina, pero todavía no puedo entender de qué se trata.¿Qué es la hidratación de Doctrine?
¿Podría alguien explicar?
He leído sobre la hidratación en la documentación de la doctrina, pero todavía no puedo entender de qué se trata.¿Qué es la hidratación de Doctrine?
¿Podría alguien explicar?
La hidratación es un método utilizado para devolver los resultados de la consulta. Por ejemplo:
HYDRATE_ARRAY
- Esto le devolverá una matriz de registros que están representados por otra matriz:
$q = Doctrine_Query::create()
->from('Post p')
->setHydrationMode(Doctrine::HYDRATE_ARRAY);
$resultSet = $q->execute(); // $resultSet is an array
foreach ($resultSet as $post) {
// $post is an array
echo $post['title'];
}
HYDRATE_RECORD
- Esto le devolverá una colección (Doctrine_Collection) de objetos:
$q = Doctrine_Query::create()
->from('Post p')
->setHydrationMode(Doctrine::HYDRATE_RECORD); // Unnecessary, HYDATE_RECORD is default method
$resultSet = $q->execute(); // $resultSet is an Doctrine_Collection object
foreach ($resultSet as $post) {
// $post is an Post object
echo $post->getTitle();
echo $post['title']; // Each Doctrine's Model object implements ArrayAccess interface so this is possible
echo $post->myCustomMethod();
}
HYDRATE_SINGULAR_SCALAR
- Devolverá el valor de la primera columna de la consulta de r esultado:
$q = Doctrine_Query::create()
->select('p.created_at')
->from('Post p')
->where('p.id = ?', 321)
->setHydrationMode(Doctrine::HYDRATE_SINGULAR_SCALAR);
$createdAt = $q->execute(); // $createdAt has value of first column from first record from result set (eg.: 2008-04-06 21:22:35)
Hay unos cuantos métodos, se puede leer acerca de cada uno en la documentación.
ok..soy normalmente cuando uso sql devuelve un objeto mysql y tengo que usar mysqli_fetch_assoc, luego ordenarlos por mí mismo y así sucesivamente ... pero ahora está todo arreglado para mí. ¿De eso se trata la hidratación, dándome objetos ordenados/matrices? –
No, no se trata de clasificar el resultado ('orderBy()' manejar esto). Se trata de * ¿Cuál será el resultado de su consulta *, ya sea un valor escalar único ('HYDRATE_SINGULAR_SCALAR'), una matriz o matrices donde las matrices anidadas representan cada registro de la base de datos (' HYDRATE_ARRAY') o una colección de objetos ('HYDRATE_RECORD') Haga [var_dump] (http://pl.php.net/manual/en/function.var-dump.php) en el resultado de la consulta para cada modo de hidratación: ¿esa es la mejor manera de ver "cómo funciona?" – Crozin
aha..i creo que lo entiendo ahora. así que se trata de en qué forma quiero que esté el resultado: valor escalar, matrices u objetos. eso suena como una muy buena característica. de lo que no tengo que convertirlos yo mismo de mysqli_object :) –
Doctrine2 documentación de referencia HIDRATACIÓN explicando: http://www.doctrine-project.org/docs/orm/2.0/en/reference/dql-doctrine-query-language.html#query-result-formats
$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);
It will return just a simple array instead of a doctrine collection object.
No
constructiva? Este es uno de los conceptos más fundamentales para entender cómo funcionan las funciones internas de Doctrine. – csvan
Creo que esta pregunta debe estar protegida en lugar de cerrada. – Simon
@Simon De acuerdo. La pregunta y la respuesta aceptada son ambas populares, ¿por qué no moverlo a _protected_ state entonces? –