У меня есть тип контента, который имеет поле ссылки на сущность, которое позволяет пользователям добавлять несколько терминов таксономии в этом поле. Я пытаюсь выполнить запросы, которые захватывают узлы, которые имеют определенный набор терминов таксономии в этом поле.
Использование одного значения в этом поле работает нормально, вот так.
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', 2)
->sort('field_last_name', DESC);
Где 2 - идентификатор искомого термина. Однако, когда я пытаюсь найти узлы, которые содержат два конкретных термина, как это,
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8])
->sort('field_last_name', DESC);
Я получаю ошибку
Неверный номер параметра: количество связанных переменных не соответствует количеству токенов:
Я также пытался
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8], 'IN')
->sort('field_last_name', DESC);
Что не подводит, но не дает ожидаемых результатов. Он отображает каждый узел , который имеет либо термин 2 OR термин 8. Вместо того , термин 2 И термин 8 , как предполагалось. Как мне выполнить запрос, который проверяет, имеет ли узел несколько определенных значений в поле ссылки на сущность?
$and->condition('custom_taxonomy', [2], 'IN')
,$and->condition('custom_taxonomy', [8], 'IN')
'IN'
тоже. Разница заключается в двух отдельных группах AND.Для выполнения сложных запросов, как вы просили, вам нужно будет использовать группу условий и запросить дельту.
Смотрите документацию QueryInterface :: условие .
источник
источник