Não é construtivo? Este é um dos conceitos mais fundamentais para entender como funcionam os internos do Doctrine.
csvan
6
Acho que essa questão deve ser protegida em vez de encerrada.
Simon
2
@Simon Agree. A pergunta e a resposta aceita são ambas populares, por que não movê-la para um estado protegido então?
Denis Kulagin
Respostas:
92
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 arrayforeach($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 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 - 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.
ok .. normalmente quando eu uso sql ele retorna um objeto mysql e eu tenho que usar mysqli_fetch_assoc, então classificá-los por mim mesmo e assim por diante ... mas agora está tudo classificado para mim. é disso que trata a hidratação, me dando objetos / matrizes ordenados?
never_had_a_name de
4
Não, não se trata de classificar o resultado ( 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?"
Crozin
4
apenas uma pequena dica. Em 1.2 HYDRATE_SINGULAR_SCALARretorna um erro constante indefinido. HYDRATE_SINGLE_SCALARestá certo.
Darmen Amanbayev
1
Como uma nota Doctrine::HYDRATE_RECORDagora é conhecido comoDoctrine::HYDRATE_OBJECT
Steve Tauber
1
Um link para a documentação mencionada tornaria esta resposta mais útil.
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:HYDRATE_RECORD
- Isso irá retornar uma coleção ( Doctrine_Collection ) de objetos:HYDRATE_SINGULAR_SCALAR
- Retornará o valor da primeira coluna do resultado da consulta:Existem mais alguns métodos, você pode ler sobre cada um na documentação.
fonte
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
Ele retornará apenas um array simples em vez de um objeto de coleção de doutrina.
fonte