Was ist Doktrinhydratation? [geschlossen]

90

Ich habe in der Dokumentation der Doktrin über Flüssigkeitszufuhr gelesen, kann aber immer noch nicht verstehen, was es ist.

Könnte jemand bitte erklären?

Never_had_a_name
quelle
Doctrine2 Dokumentationsreferenz zur Erläuterung von HYDRATION: doctrine-project.org/docs/orm/2.0/en/reference/…
Dawid Ohia
29
Nicht konstruktiv? Dies ist eines der grundlegendsten Konzepte, um zu verstehen, wie die Interna der Doktrin funktionieren.
CSvan
6
Ich denke, diese Frage sollte eher geschützt als geschlossen werden.
Simon
2
@ Simon zustimmen. Die Frage und die akzeptierte Antwort sind beide beliebt. Warum nicht dann in den geschützten Zustand versetzen ?
Denis Kulagin

Antworten:

92

Die Flüssigkeitszufuhr ist eine Methode zur Rückgabe von Abfrageergebnissen. Beispielsweise:

  1. HYDRATE_ARRAY - Dies gibt Ihnen ein Array von Datensätzen zurück, die durch ein anderes Array dargestellt werden:

    $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 erhalten 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 des Abfrageergebnisses zurück:

     $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 noch einige weitere Methoden, die Sie in der Dokumentation nachlesen können.

Crozin
quelle
ok..so normalerweise, wenn ich sql benutze, gibt es ein mysql-Objekt zurück und ich muss mysqli_fetch_assoc verwenden, sie dann selbst sortieren und so weiter ... aber jetzt ist alles für mich sortiert. Darum geht es bei der Flüssigkeitszufuhr, wenn ich sortierte Objekte / Arrays bekomme?
nie_had_a_name
4
Nein, es geht nicht darum, das Ergebnis zu sortieren ( orderBy()behandeln Sie dies). Es geht darum, was Ihre Abfrage ergibt , ob es sich um einen einzelnen Skalarwert ( HYDRATE_SINGULAR_SCALAR), ein Array oder Arrays handelt, in denen verschachtelte Arrays jeden Datenbankdatensatz ( HYDRATE_ARRAY) oder eine Sammlung von Objekten ( HYDRATE_RECORD) darstellen. Hat Var_dump auf Abfrageergebnis für jeden Trink Modus - „wie es funktioniert“ , dass der beste Weg ist , um zu sehen
Crozin
4
nur ein kleiner tipp. In 1.2 wird HYDRATE_SINGULAR_SCALARein undefinierter konstanter Fehler zurückgegeben. HYDRATE_SINGLE_SCALARist richtig.
Darmen Amanbayev
1
Als Notiz Doctrine::HYDRATE_RECORDist jetzt bekannt alsDoctrine::HYDRATE_OBJECT
Steve Tauber
1
Ein Link zu der oben genannten Dokumentation würde diese Antwort hilfreicher machen.
Sean the Bean
2
$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);

Es wird nur ein einfaches Array anstelle eines Doktrinensammlungsobjekts zurückgegeben.

Jubayer Arefin
quelle