logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll
18/06/2025, by Ivan

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

 

Source URL:
Source authors:

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.