Articles

Jede Abfrage kann eine entsprechende „Zähl-Abfrage“ haben. Eine Zähl-Abfrage gibt die Anzahl der Zeilen der ursprünglichen Abfrage zurück. Um eine Zähl-Abfrage aus einer bestehenden Abfrage (ein Select-Query-Objekt, das das SelectInterface implementiert) zu erhalten, verwenden Sie die Methode countQuery().


Manche SQL-Abfragen können doppelte Ergebnisse liefern. In solchen Fällen können doppelte Zeilen mit dem Schlüsselwort „DISTINCT“ in einer statischen Abfrage herausgefiltert werden. In einer dynamischen Abfrage verwenden Sie die Methode distinct().


Um nach einem bestimmten Feld zu gruppieren, verwenden Sie die Methode groupBy().
$query->groupBy('uid');
Der obige Code weist die Abfrage an, nach dem Feld uid zu gruppieren. Beachten Sie, dass der Feldname hier ein Alias sein muss, der durch die Methoden addField() oder addExpression() erstellt wurde. In den meisten Fällen möchten Sie daher den Rückgabewert dieser Methoden verwenden, um sicherzustellen, dass der richtige Alias genutzt wird.


Um eine WHERE-Klausel zu einer dynamischen Abfrage hinzuzufĂĽgen, verwenden Sie die Methode condition():
$query->condition('bundle', 'article', '=');
Der obige Code weist die Abfrage an, die Ergebnisse auf den Inhaltstyp „article“ zu filtern. Beachten Sie, dass der Feldname hier ein Alias sein muss, der durch die Methoden addField() oder addExpression() erzeugt wurde.
Parameter von condition
Die Methode condition() akzeptiert drei Parameter:


Eine Select-Abfrage gibt immer ein Result-Set-Objekt zurück, das null oder mehr Datensätze enthält. Es gibt verschiedene Möglichkeiten, Daten aus diesem Result-Set zu erhalten, abhängig vom Anwendungsfall. Standardmäßig werden Datensätze als Objekte zurückgegeben, sofern der Fetch-Modus nicht geändert wird (siehe: setFetchMode).


Abfragen können in Objekte basierend auf benutzerdefinierten Klassen extrahiert werden. Zum Beispiel, wenn wir eine Klasse mit dem Namen ExampleClass haben, gibt die folgende Abfrage Objekte vom Typ ExampleClass zurück.


Einfügeanfragen sollten immer mit einem Query-Builder-Objekt verwendet werden. In einigen Datenbanken ist eine spezielle Behandlung von LOB-Feldern (Large OBject, z.B. TEXT in MySQL) und BLOB (Binary Large OBject) erforderlich, weshalb eine Abstraktionsebene notwendig ist, damit einzelne Datenbanktreiber jede spezielle Behandlung implementieren können, die sie benötigen.
EinfĂĽgeanfragen werden mit der Methode insert() wie folgt gestartet:


Merge-Anfragen stellen eine besondere Art von Hybridanfrage dar. Obwohl die Syntax dafĂĽr in der SQL-2003-Spezifikation definiert ist, unterstĂĽtzt praktisch keine Datenbank die Standardsyntax. Allerdings bieten die meisten eine alternative Implementierung mit syntaxspezifischen Varianten fĂĽr die jeweilige Datenbank an. Der Merge-Query-Builder in Drupal abstrahiert das Konzept der Merge-Anfrage in ein strukturiertes Objekt, das mit der entsprechenden Syntax fĂĽr jede Datenbank kompiliert werden kann.


DELETE-Abfragen sollten immer mit einem Abfrageerstellungsobjekt verwendet werden. Sie werden mit der Methode delete()
wie folgt ausgefĂĽhrt:
$query = $connection->delete('mytable', $options);
Dies erzeugt ein Löschabfrageobjekt, das Einträge aus der Tabelle mytable
löscht. Beachten Sie, dass keine geschweiften Klammern für den Tabellennamen erforderlich sind, da der Abfrageersteller dies automatisch übernimmt.


Drupal unterstützt auch Transaktionen, einschließlich einer transparenten Fallback-Option für Datenbanken, die keine Transaktionen unterstützen. Transaktionen können jedoch ziemlich kompliziert werden, wenn Sie versuchen, zwei Transaktionen gleichzeitig zu starten. Das Verhalten hängt in diesem Fall auch von der Datenbank ab.
