Ich habe einen Inhaltstyp mit einem Entitätsreferenzfeld, mit dem Benutzer diesem Feld mehrere Taxonomiebegriffe hinzufügen können. Ich versuche, Abfragen durchzuführen, die Knoten mit einem bestimmten Satz von Taxonomiebegriffen in diesem Feld erfassen.
Die Verwendung eines Werts in diesem Feld funktioniert wie folgt.
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', 2)
->sort('field_last_name', DESC);
Wobei 2 die ID des gesuchten Begriffs ist. Wenn ich jedoch versuche, nach Knoten zu suchen, die zwei bestimmte Begriffe wie diesen enthalten,
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8])
->sort('field_last_name', DESC);
Ich erhalte den Fehler
Ungültige Parameternummer: Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token überein:
Ich habe es auch versucht
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8], 'IN')
->sort('field_last_name', DESC);
Was nicht scheitert, aber nicht die beabsichtigten Ergebnisse liefert. Es zeigt jeden Knoten an, der entweder Term 2 ODER Term 8 hat. Anstelle von Term 2 UND Term 8, wie beabsichtigt. Wie führe ich eine Abfrage durch, mit der überprüft wird, ob ein Knoten mehrere bestimmte Werte in einem Entitätsreferenzfeld enthält?
$and->condition('custom_taxonomy', [2], 'IN')
,$and->condition('custom_taxonomy', [8], 'IN')
'IN'
. Was den Unterschied ausmacht, sind die beiden UND-Gruppen.Um komplexe Abfragen wie gewünscht durchzuführen, müssen Sie eine Bedingungsgruppe verwenden und das Delta abfragen.
Siehe Dokumentation zu QueryInterface :: condition .
quelle
quelle