¿Qué es la hidratación Doctrine? [cerrado]

90

He leído sobre la hidratación en la documentación de la doctrina, pero todavía no puedo entender qué es.

¿Podría alguien explicarme?

never_had_a_name
fuente
Referencia de documentación de Doctrine2 que explica la HIDRATACIÓN: doctrine-project.org/docs/orm/2.0/en/reference/…
Dawid Ohia
29
¿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:

  1. 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'];
    }
    
  2. 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();
    }
    
  3. 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.

Crozin
fuente
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.
Sean the Bean
2
$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);

Devolverá solo una matriz simple en lugar de un objeto de colección de doctrina.

Jubayer Arefin
fuente