Eu li sobre hidratação na documentação da doutrina, mas ainda não consigo entender o que é.
Alguém poderia explicar?
Eu li sobre hidratação na documentação da doutrina, mas ainda não consigo entender o que é.
Alguém poderia explicar?
Respostas:
Hidratação é um método usado para retornar os resultados da consulta. Por exemplo:
HYDRATE_ARRAY
- Isso retornará uma matriz de registros que são representados por outra 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'];
}
HYDRATE_RECORD
- Isso irá retornar uma coleção ( 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();
}
HYDRATE_SINGULAR_SCALAR
- Retornará o valor da primeira coluna do resultado da 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)
Existem mais alguns métodos, você pode ler sobre cada um na documentação.
orderBy()
lidar com isso). É sobre Qual será o resultado da sua consulta , se será um único valor escalar ( HYDRATE_SINGULAR_SCALAR
), um array ou arrays onde os arrays aninhados representam cada registro do banco de dados ( HYDRATE_ARRAY
) ou uma coleção de objetos ( HYDRATE_RECORD
). Faça var_dump no resultado da consulta para cada modo de hidratação - essa é a melhor maneira de ver "como funciona?"
HYDRATE_SINGULAR_SCALAR
retorna um erro constante indefinido. HYDRATE_SINGLE_SCALAR
está certo.
Doctrine::HYDRATE_RECORD
agora é conhecido comoDoctrine::HYDRATE_OBJECT
$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);
Ele retornará apenas um array simples em vez de um objeto de coleção de doutrina.