2010-04-18 14 views
83

Ich habe in der Doktrin Dokumentation über Hydration gelesen, aber ich kann immer noch nicht verstehen, was es ist.Was ist die Hydratation der Lehre?

Könnte jemand bitte erklären?

+24

nicht konstruktiv? Dies ist eines der grundlegendsten Konzepte, um zu verstehen, wie die Doktrin-Interna funktionieren. – csvan

+5

Ich denke, diese Frage sollte eher geschützt als geschlossen werden. – Simon

+1

@Simon Zustimmen. Frage und die angenommene Antwort sind beide beliebt, warum nicht verschieben Sie es in _protected_ state dann? –

Antwort

87

Hydration ist eine Methode zum Zurückgeben von Abfrageergebnissen. Zum Beispiel:

  1. HYDRATE_ARRAY - Dadurch kehren Sie eine Reihe von Datensätzen, die durch eine andere Anordnung dargestellt:

    $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 - Dadurch kehren Sie eine Sammlung (Doctrine_Collection) von Objekten:

    $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 - Gibt den Wert der ersten Spalte von Abfrage r zurück eiter:

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

Es gibt ein paar weitere Methoden ist, können Sie über jede in der Dokumentation lesen.

+0

ok..so normalerweise, wenn ich sql verwende, gibt es ein mysql Objekt zurück und ich muss mysqli_fetch_assoc verwenden, dann sortiere ich sie selbst und so weiter ... aber jetzt ist alles für mich sortiert. darum geht es bei der Hydration, die mir sortierte Objekte/Arrays gibt? –

+4

Nein, es geht nicht um Sortierresultate ('orderBy()' handle dies). Es geht um * Was wird Ihre Abfrage ergeben *, ob es ein einzelner Skalarwert ('HYDRATE_SINGULAR_SCALAR') ist, ein Array oder Arrays, bei denen geschachtelte Arrays jeden Datenbankeintrag (' HYDRATE_ARRAY') oder eine Sammlung von Objekten ('HYDRATE_RECORD') repräsentieren). Führen Sie [var_dump] (http://pl.php.net/manual/en/function.var-dump.php) im Abfrageergebnis für jeden Hydrationsmodus aus - das ist der beste Weg zu sehen, "wie es funktioniert". – Crozin

+0

aha..ich denke ich bekomme es jetzt. Es geht also darum, in welcher Form ich das Ergebnis haben möchte: Skalarwert, Arrays oder Objekte? das klingt nach einem sehr netten Feature. als ich sie nicht selbst von mysqli_object konvertieren muss :) –

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

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