97 votes

Qu'est-ce que la doctrine de l'hydratation?

J'ai lu sur l'hydratation dans la documentation de la doctrine, mais je ne comprends toujours pas ce que c'est.

Quelqu'un pourrait-il s'il vous plaît expliquer?

93voto

Crozin Points 22346

L'hydratation est une méthode utilisée pour retourner les résultats de la requête. Par exemple:

  1. HYDRATE_ARRAY - Ce qui va vous retourner un tableau d'enregistrements qui sont représentés par un autre tableau:

    $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 - Ce qui va vous renvoyer une collection (Doctrine_Collection) des objets:

    $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 - Sera de retour la valeur de la première colonne de résultat de requête:

     $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)
    

Il y a un peu plus de méthodes , vous pouvez lire au sujet de chaque dans la documentation.

9voto

JohnM2 Points 3543

2voto

Jubayer Arefin Points 161
$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);

It will return just a simple array instead of a doctrine collection object.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X