Pas constructif? C'est l'un des concepts les plus fondamentaux pour comprendre le fonctionnement des internes de la Doctrine.
csvan
6
Je pense que cette question devrait être protégée plutôt que fermée.
Simon
2
@Simon D'accord. La question et la réponse acceptée sont toutes deux populaires, pourquoi ne pas la déplacer dans un état protégé alors?
Denis Kulagin
Réponses:
92
L'hydratation est une méthode utilisée pour renvoyer les résultats de la requête. Par exemple:
HYDRATE_ARRAY - Cela vous retournera 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 arrayforeach($resultSet as $post){// $post is an array
echo $post['title'];}
HYDRATE_RECORD- Cela vous retournera une collection ( Doctrine_Collection ) d'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 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 - Renvoie la valeur de la première colonne du résultat de la 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 existe quelques méthodes supplémentaires, vous pouvez en savoir plus sur chacune dans la documentation.
ok .. donc normalement quand j'utilise sql, il retourne un objet mysql et je dois utiliser mysqli_fetch_assoc, puis les trier moi-même et ainsi de suite ... mais maintenant tout est trié pour moi. c'est ça l'hydratation, me donnant des objets / tableaux triés?
never_had_a_name
4
Non, il ne s'agit pas de trier les résultats ( orderBy()gérer cela). Il s'agit de savoir quel sera le résultat de votre requête , qu'il s'agisse d'une seule valeur scalaire ( HYDRATE_SINGULAR_SCALAR), d'un tableau ou de tableaux où les tableaux imbriqués représentent chaque enregistrement de base de données ( HYDRATE_ARRAY) ou une collection d'objets ( HYDRATE_RECORD). Faites var_dump le résultat de la requête pour chaque mode d'hydratation - « comment ça marche » qui est la meilleure façon de voir
Crozin
4
juste un petit conseil. In 1.2 HYDRATE_SINGULAR_SCALARrenvoie une erreur constante non définie. HYDRATE_SINGLE_SCALARest correct.
Darmen Amanbayev
1
Comme une note Doctrine::HYDRATE_RECORDest maintenant connue sous le nom deDoctrine::HYDRATE_OBJECT
Steve Tauber
1
Un lien vers la documentation susmentionnée rendrait cette réponse plus utile.
Réponses:
L'hydratation est une méthode utilisée pour renvoyer les résultats de la requête. Par exemple:
HYDRATE_ARRAY
- Cela vous retournera un tableau d'enregistrements qui sont représentés par un autre tableau:HYDRATE_RECORD
- Cela vous retournera une collection ( Doctrine_Collection ) d'objets:HYDRATE_SINGULAR_SCALAR
- Renvoie la valeur de la première colonne du résultat de la requête:Il existe quelques méthodes supplémentaires, vous pouvez en savoir plus sur chacune dans la documentation.
la source
orderBy()
gérer cela). Il s'agit de savoir quel sera le résultat de votre requête , qu'il s'agisse d'une seule valeur scalaire (HYDRATE_SINGULAR_SCALAR
), d'un tableau ou de tableaux où les tableaux imbriqués représentent chaque enregistrement de base de données (HYDRATE_ARRAY
) ou une collection d'objets (HYDRATE_RECORD
). Faites var_dump le résultat de la requête pour chaque mode d'hydratation - « comment ça marche » qui est la meilleure façon de voirHYDRATE_SINGULAR_SCALAR
renvoie une erreur constante non définie.HYDRATE_SINGLE_SCALAR
est correct.Doctrine::HYDRATE_RECORD
est maintenant connue sous le nom deDoctrine::HYDRATE_OBJECT
Il renverra juste un simple tableau au lieu d'un objet de collection doctrine.
la source