Cos'è l'idratazione Doctrine? [chiuso]


90

Ho letto dell'idratazione nella documentazione di Dottrine ma ancora non riesco a capire cosa sia.

Qualcuno potrebbe spiegare?


Documentazione di riferimento di Doctrine2 che spiega l'IDRATAZIONE: doctrine-project.org/docs/orm/2.0/en/reference/…
Dawid Ohia,

29
Non costruttivo? Questo è uno dei concetti fondamentali per capire come funzionano le parti interne di Dottrina.
csvan

6
Penso che questa domanda dovrebbe essere protetta piuttosto che chiusa.
Simon

2
@ Simone D'accordo. La domanda e la risposta accettata sono entrambe popolari, perché non spostarla in uno stato protetto allora?
Denis Kulagin

Risposte:


92

L'idratazione è un metodo utilizzato per restituire i risultati delle query. Per esempio:

  1. HYDRATE_ARRAY - Questo ti restituirà un array di record che sono rappresentati da un altro array:

    $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- Questo ti restituirà una raccolta ( Doctrine_Collection ) di oggetti:

    $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 - Restituirà il valore della prima colonna del risultato della query:

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

Ci sono alcuni metodi in più, puoi leggere su ciascuno nella documentazione.


ok .. quindi normalmente quando uso sql restituisce un oggetto mysql e devo usare mysqli_fetch_assoc, quindi ordinarli da solo e così via ... ma ora è tutto ordinato per me. questo è l'idratazione, che mi dà oggetti / array ordinati?
never_had_a_name

4
No, non si tratta di ordinare i risultati ( orderBy()gestisci questo). Si tratta di Quale sarà il risultato della tua query , se sarà un singolo valore scalare ( HYDRATE_SINGULAR_SCALAR), un array o array in cui gli array annidati rappresentano ogni record di database ( HYDRATE_ARRAY) o una raccolta di oggetti ( HYDRATE_RECORD). Fare var_dump sul risultato di domanda per ciascuna modalità di idratazione - "come funziona" questo è il modo migliore per vedere
Crozin

4
solo un piccolo suggerimento. In 1.2 HYDRATE_SINGULAR_SCALARrestituisce un errore costante non definito. HYDRATE_SINGLE_SCALARè giusto.
Darmen Amanbayev

1
Come una nota Doctrine::HYDRATE_RECORDè ora nota comeDoctrine::HYDRATE_OBJECT
Steve Tauber

1
Un collegamento alla suddetta documentazione renderebbe questa risposta più utile.
Sean the Bean

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

Restituirà solo un semplice array invece di un oggetto di raccolta doctrine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.