Drupal 8's Entity Query API: Ein umfassendes Leitfaden
Drupal 8 überging von entityfieldQuery (Drupal 7) zum robusteren entity.query
-Dienst für Abfrageberitäten. Dieser Service, der über statische Anrufe oder Abhängigkeitsinjektion zugänglich ist, erleichtert komplexe Abfragen mit Bedingungen. Dieser Leitfaden untersucht seine Fähigkeiten.
Schlüsselkonzepte
entity.query
Service: Der Kern der Entitätsabfrage von Drupal 8. Erstellt Abfrageobjekte für bestimmte Entitätstypen (Knoten, Benutzer usw.). execute()
Methode: entity_load()
entity_load_multiple()
/:
entity.query
Zugriff auf den
Es gibt zwei Methoden zum Zugriff auf den Dienst:
1. Statischer Zugriff (weniger empfohlen):
$query = \Drupal::entityQuery('node');
Ersetzen Sie 'Knoten' durch den Maschinennamen des gewünschten Entitätstyps.
2. Abhängigkeitsinjektion (empfohlen):
$entity_query_service = $container->get('entity.query'); $query = $entity_query_service->get('node');
Dieser Ansatz wird für eine bessere Testbarkeit und Entkopplung bevorzugt.
Erstellen von Abfragen
Hier sind Beispiele, die die Abfragekonstruktion demonstrieren:
Einfache Abfrage (veröffentlichte Knoten):
$query = \Drupal::entityQuery('node') ->condition('status', 1); $nids = $query->execute();
$nids
komplexe Abfrage (mehrere Bedingungen):
$query = \Drupal::entityQuery('node') ->condition('status', 1) ->condition('changed', REQUEST_TIME, '<') ->condition('title', 'cat', 'CONTAINS') ->condition('field_tags.entity.name', 'cats'); $nids = $query->execute();
field_tags
Diese abgerufener Knoten, die vor der aktuellen Zeit modifiziert wurden, enthielten "Katze" im Titel und verweisen auf die Taxonomie -Taxonomie in field_tags.entity.name
. Beachten Sie die Behandlung von referenzierten Entitäten (
Zustandsgruppen (und/oder):
$query = \Drupal::entityQuery('node') ->condition('status', 1) ->condition('changed', REQUEST_TIME, '<'); $group = $query->orConditionGroup() ->condition('title', 'cat', 'CONTAINS') ->condition('field_tags.entity.name', 'cats'); $nids = $query->condition($group)->execute();
orConditionGroup
Dies verwendet ein andConditionGroup
, um Knoten zu finden, die entweder den Titel- oder Tag -Zustand entsprechen.
Ladeeinheiten
Verwenden Sie nach Ausführung einer Abfrage diese Funktionen, um Entitäten zu laden:
Einzeleinheit:
$node = entity_load('node', $nids[0]);
Mehrere Entitäten:
$nodes = entity_load_multiple('node', $nids);
Diese Funktionen sind Wrapper für den Entity Storage Manager. Direktzugriff über den Storage Manager ist auch mit Abhängigkeitsinjektion möglich:
$node_storage = $container->get('entity.manager')->getStorage('node'); $nodes = $node_storage->loadMultiple($nids);
Schlussfolgerung
Drupal 8's Entity Query API bietet eine signifikante Verbesserung gegenüber dem Vorgänger. Sein objektorientierter Ansatz und seine flexiblen Zustandsmethoden ermöglichen Entwicklern, anspruchsvolle Entitätsanfragen aufzubauen. Denken Sie daran, die Abhängigkeitsinjektion für bessere Codepraktiken zu verwenden.
Das obige ist der detaillierte Inhalt vonDie Drupal 8 -Version von EntityFieldQuery. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!