Bedingungen
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:
- $field – Das zu vergleichende Feld (erforderlich).
- $value – Der Vergleichswert (optional, Standardwert NULL).
- $operator – Der Vergleichsoperator (optional, Standard '=').
Unterstützte Operatoren
Die üblichen Vergleichsoperatoren '=', '<>', '<', '<=', '>', '>=' werden von allen unterstützten Datenbanktypen unterstützt.
Verwendung von IN, NOT IN
Die Operatoren IN und NOT IN nehmen ein Array als $value und vergleichen den Feldwert mit den Arraywerten.
$users = [2,5,17,22]; $query->condition('uid', $users, 'IN');
In diesem Beispiel gibt die Abfrage Datensätze zurück, bei denen uid 2, 5, 17 oder 22 entspricht.
Verwendung von BETWEEN und NOT BETWEEN
Die Operatoren BETWEEN und NOT BETWEEN nehmen ein Array mit zwei Werten zum Vergleich.
$query->condition('count', [5,10], 'BETWEEN');
Diese Abfrage gibt Datensätze mit einem count-Wert zwischen 5 und 10 zurück.
Verwendung von IS NULL, IS NOT NULL, EXISTS und NOT EXISTS
Konventionell verwendet man hierfür nicht condition(), sondern spezielle Methoden:
$query->isNull($field); $query->isNotNull($field); $query->exists($field); $query->notExists($field);
Während die Bedingung $query->condition($field, NULL, 'IS NOT NULL'); funktionieren sollte, wird obige Konvention empfohlen.
Andere Operatoren
Andere Operatoren wie BINARY oder systemabhängige Operatoren können funktionieren oder auch nicht. Beachten Sie dies bei der Entwicklung von Modulen, die in verschiedenen Systemen eingesetzt werden sollen.
Verwendung mehrerer Bedingungen
Sie können mehrere condition()-Methoden hinzufügen, um eine Abfrage weiter einzuschränken.
$query->condition('bundle', 'article', '='); $query->condition('status', 1, '=');
Wenn mehrere condition() vorliegen, müssen alle erfüllt sein, damit ein Datensatz im Ergebnis erscheint (die Bedingungen werden mit AND verknüpft).
Tipp: Wenn Sie nur OR-Bedingungen wollen, verwenden Sie orConditionGroup.
Bedingungsgruppen
Bedingungsgruppen können verwendet werden, um komplexere WHERE-Ausdrücke (inklusive OR) zu erstellen. Es gibt zwei Arten von Gruppen:
- orConditionGroup – Gibt ein Objekt mit Bedingungen zurück, die mit OR verknüpft sind.
- andConditionGroup – Gibt ein Objekt mit Bedingungen zurück, die mit AND verknüpft sind.
Bedingungsgruppen geben ein Objekt zurück, das dann als Bedingung zur Abfrage hinzugefügt werden kann.
// Erstelle eine orConditionGroup $orGroup = $query->orConditionGroup() ->condition('promoted', 1) ->condition('uid', [2,4,7,22], 'IN'); // Füge die Gruppe zur Abfrage hinzu. $query->condition($orGroup);
In diesem Beispiel werden die Bedingungen für promoted und uid mit OR gruppiert in die WHERE-Klausel eingefügt. Dies ergibt eine WHERE-Klausel, die etwa so aussieht:
WHERE (promoted = 1 OR uid IN (2,4,7,22))
Sie können bei Bedarf mehrere orConditionGroup- und andConditionGroup-Gruppen hinzufügen. Bedingungsgruppen können verschachtelt werden, um komplexere WHERE-Klauseln zu erzeugen.
Beispiel für eine komplexe WHERE-Klausel:
WHERE (a = 1 OR b = 1) AND ((c = 1 AND d = 1) OR (e = 1))
Diese Abfrage kann mit Bedingungsgruppen so formuliert werden:
$orGroup1 = $query->orConditionGroup() ->condition('a', 1) ->condition('b', 1); $andGroup1 = $query->andConditionGroup() ->condition('c', 1) ->condition('d', 1); $orGroup2 = $query->orConditionGroup() ->condition($andGroup1) ->condition('e', 1); $query->condition($orGroup1); $query->condition($orGroup2);
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.