¿No es constructivo? Este es uno de los conceptos más fundamentales para comprender cómo funcionan los componentes internos de Doctrine.
csvan
6
Creo que esta cuestión debería protegerse en lugar de cerrarse.
Simon
2
@Simon de acuerdo. La pregunta y la respuesta aceptada son populares, ¿por qué no pasarla a un estado protegido entonces?
Denis Kulagin
Respuestas:
92
La hidratación es un método que se utiliza para devolver resultados de consultas. 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 arrayforeach($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 objectforeach($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 del resultado de la consulta:
$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 algunos métodos más, puede leer sobre cada uno en la documentación.
ok..así que normalmente cuando uso sql devuelve un objeto mysql y tengo que usar mysqli_fetch_assoc, luego ordenarlos yo mismo y así sucesivamente ... pero ahora todo está ordenado para mí. de eso se trata la hidratación, ¿darme objetos / matrices ordenados?
never_had_a_name
4
No, no se trata de ordenar el resultado ( orderBy()manejar esto). Se trata de cuál será el resultado de su consulta , si será un solo valor escalar ( 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). ¿ Var_dump en el resultado de la consulta para cada modo de hidratación? Esa es la mejor manera de ver "¿cómo funciona?"
Crozin
4
solo un pequeño consejo. En 1.2 HYDRATE_SINGULAR_SCALARdevuelve un error constante indefinido. HYDRATE_SINGLE_SCALARes correcto.
Darmen Amanbayev
1
Como una nota Doctrine::HYDRATE_RECORDahora se conoce comoDoctrine::HYDRATE_OBJECT
Steve Tauber
1
Un enlace a la documentación antes mencionada haría que esta respuesta sea más útil.
Respuestas:
La hidratación es un método que se utiliza para devolver resultados de consultas. Por ejemplo:
HYDRATE_ARRAY
- Esto le devolverá una matriz de registros que están representados por otra matriz:HYDRATE_RECORD
- Esto le devolverá una colección ( Doctrine_Collection ) de objetos:HYDRATE_SINGULAR_SCALAR
- Devolverá el valor de la primera columna del resultado de la consulta:Hay algunos métodos más, puede leer sobre cada uno en la documentación.
fuente
orderBy()
manejar esto). Se trata de cuál será el resultado de su consulta , si será un solo valor escalar (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
). ¿ Var_dump en el resultado de la consulta para cada modo de hidratación? Esa es la mejor manera de ver "¿cómo funciona?"HYDRATE_SINGULAR_SCALAR
devuelve un error constante indefinido.HYDRATE_SINGLE_SCALAR
es correcto.Doctrine::HYDRATE_RECORD
ahora se conoce comoDoctrine::HYDRATE_OBJECT
Devolverá solo una matriz simple en lugar de un objeto de colección de doctrina.
fuente