Mam typ zawartości, który ma pole odniesienia encji, które pozwala użytkownikom dodawać wiele terminów taksonomii w tym polu. Próbuję wykonać zapytania, które pobierają węzły, które mają określony zestaw terminów taksonomicznych w tym polu.
Użycie jednej wartości w tym polu działa dobrze, tak jak to.
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', 2)
->sort('field_last_name', DESC);
Gdzie 2 to identyfikator szukanego terminu. Jednak gdy próbuję wyszukać węzły, które zawierają dwa takie specyficzne hasła,
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8])
->sort('field_last_name', DESC);
Otrzymuję błąd
Nieprawidłowy numer parametru: liczba powiązanych zmiennych nie zgadza się z liczbą tokenów:
Próbowałem też
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8], 'IN')
->sort('field_last_name', DESC);
Co nie zawodzi, ale nie zapewnia zamierzonych rezultatów. Wyświetla każdy węzeł, który ma albo termin 2 LUB termin 8. Zamiast terminu 2 AND termin 8 zgodnie z przeznaczeniem. Jak miałbym wykonać zapytanie sprawdzające, czy węzeł ma wiele określonych wartości w polu odwołania do encji?
$and->condition('custom_taxonomy', [2], 'IN')
,$and->condition('custom_taxonomy', [8], 'IN')
'IN'
również z . Różnica polega na dwóch osobnych grupach AND.Aby wykonać złożone zapytania, tak jak prosiłeś, będziesz musiał użyć grupy warunków i zapytać o różnicę.
Zobacz dokumentację QueryInterface :: condition .
źródło
źródło