Рейтинг:2

Drupal JSON:API — получение узлов, помеченных несколькими терминами

флаг cn

Допустим, у меня есть тип контента статьи и поле ссылки field_tags (с несколькими значениями, ссылающимися на словарь «тегов»)

Чтобы получить статьи, ссылающиеся, скажем, на «tag1» или «tag2», я делаю следующее:

jsonapi/узел/статья?
&фильтр[теги][условие][путь]=field_tags.id
&фильтр[теги][условие][оператор]=IN
&фильтр[теги][условие][значение][]=id-of-tag1
&фильтр[теги][условие][значение][]=id-of-tag2

Это дает мне все статьи с тегом 1 или тегом 2.

Однако, как я могу получить все статьи, которые имеют оба тега tag1 и тег2?

Рейтинг:0
флаг pw

Я пробовал следующим образом

/jsonapi/node/article?filter[field_tags.meta.drupal_internal__target_id]=5&filter[field_tags.meta.drupal_internal__target_id]=6

введите описание изображения здесь

вы можете видеть на снимке экрана только 1 отфильтрованный узел, который имеет идентификатор термина 5 и 6.

Hubert avatar
флаг cn
Спасибо за ответ! Когда я пытаюсь это сделать, он возвращает только те узлы, которые имеют последнее значение в фильтре. Итак, в вашем примере я думаю, что это будет возвращать только узлы с идентификатором термина 6 . Были ли в вашем тесте узлы, у которых был только идентификатор термина 6? Я думаю, что они будут возвращены с этим запросом.
khurrami avatar
флаг pw
Да, вы правы, когда я добавил узел только с идентификатором термина 6, который также отфильтрован.
Рейтинг:0
флаг cn

Вы можете использовать группировку условий, как показано ниже:

?filter[группа тегов][группа][союз]=И

&filter[tagA-фильтр][условие][путь]=field.tags.id
&filter[tagA-фильтр][условие][значение]=id-of-tag1
&filter[tagA-фильтр][условие][memberOf]=группа тегов

&filter[tagB-фильтр][условие][путь]=field.tags.id
&filter[tagB-фильтр][условие][значение]=id-of-tag2
&filter[tagB-фильтр][условие][memberOf]=группа тегов

Я не пробовал это, но я думаю, что вы даже можете использовать такой код:

?filter[tagA-фильтр][условие][путь]=field.tags.id
&filter[tagA-фильтр][условие][значение]=id-of-tag1
&filter[tagB-фильтр][условие][путь]=field.tags.id
&filter[tagB-фильтр][условие][значение]=id-of-tag2

просто обратите внимание, что в этом случае для условий используются два разных ключа

Hubert avatar
флаг cn
К сожалению, похоже, это не работает. Когда я пытаюсь, он не возвращает никакого результата.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.