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

3 minutos de lectura

avatar de usuario
nunca_tuve_un_nombre

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 por favor explicar?

  • Referencia de la documentación de Doctrine2 que explica la HIDRATACIÓN: doctrina-proyecto.org/docs/orm/2.0/en/reference/…

    – David Ohia

    5 de septiembre de 2011 a las 13:08


  • ¿No es constructivo? Este es uno de los conceptos más fundamentales para entender cómo funciona el funcionamiento interno de Doctrine.

    – csvan

    7 de julio de 2014 a las 9:06

  • Creo que esta pregunta debería protegerse en lugar de cerrarse.

    – Simón

    30 de enero de 2015 a las 16:17

  • @Simón De acuerdo. Tanto la pregunta como la respuesta aceptada son populares, ¿por qué no moverla a protegido estado entonces?

    – Denis Kulaguin

    5 de julio de 2016 a las 8:43

avatar de usuario
Crozín

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.

  • 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, de darme objetos ordenados/matrices?

    – never_had_a_name

    18 de abril de 2010 a las 10:49


  • No, no se trata de ordenar el resultado (orderBy() maneja esto). Se trata ¿Cuál será el resultado de su consulta?si será un único 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). Hacer var_dump en el resultado de la consulta para cada modo de hidratación: esa es la mejor manera de ver “¿cómo funciona?”

    – Crozín

    18 de abril de 2010 a las 11:24

  • solo un pequeño consejo. En 1.2 HYDRATE_SINGULAR_SCALAR devuelve un error constante indefinido. HYDRATE_SINGLE_SCALAR es correcto.

    – Darmen Amanbay

    1 de noviembre de 2011 a las 10:33


  • como nota Doctrine::HYDRATE_RECORD ahora se conoce como Doctrine::HYDRATE_OBJECT

    –Steve Tauber

    3 de marzo de 2014 a las 13:55

  • Un enlace a la documentación antes mencionada haría que esta respuesta fuera más útil.

    – Sean el Frijol

    18/09/2015 a las 20:32

avatar de usuario
Jubayer Arefin

$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);

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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad