GraphQL для Drupalers - Часть 4. Извлечение сущностей

  1. TL; DR
  2. NodeQuery
  3. Используйте The Views

В последний пост мы говорили об основных строительных блоках каждого запроса GraphQL - полях. Мы обсудили их типы и особенности, а также описали правила, согласно которым поля Drupal превращаются в поля GraphQL. На этой неделе мы собирались расширить тему и охватить создание полей, но Даниэль Нойола задал интересный вопрос в комментарии ниже к одной из недавних статей:

Как я могу отфильтровать результаты в nodeQuery? Как и в обычном представлении или с предложением «где» в выражении SQL. Я заметил, что он получает NodeQueryFilterInput, но я не вижу, как его использовать.

Выборка объектов на основе фильтра или набора фильтров является распространенным случаем, поэтому сначала остановимся на этом.

TL; DR

Есть два способа запросить хранилище сущностей. Во-первых, через поля entityQuery, которые поставляются с основным модулем, но ограничены в функциональности. Они позволяют нам фильтровать только по базовым полям, и нет способа использовать оператор, отличный от « равно» . Другой подход гораздо более мощный, поскольку он основан на представлениях. Для этого требуется установить дополнительный модуль - graphql_views . Начнем со встроенного способа.

NodeQuery

Каждый тип сущности в системе получает свое собственное поле запроса. Давайте посмотрим в проводнике, как это выглядит для узлов:

Таким образом, это поле (синее) с 3 аргументами: смещение, лимит и фильтр (фиолетовое), которое возвращает значение типа EntityQueryResult (все типы выделены желтым цветом).

Первые два аргумента, offset и limit , предназначены для подкачки страниц и работают так же, как в SQL. Оба являются целыми числами, и оба имеют значения по умолчанию 0 и 10 соответственно (зеленый). Аргументы, которые имеют значения по умолчанию, могут быть опущены. Мы будем использовать эту функцию в ближайшее время.

Последний аргумент - фильтр - имеет сложный тип NodeQueryFilterInput. Давайте нажмем на это:

Таким образом, он содержит все базовые поля запрашиваемого типа сущности. Недостаточно выдавать произвольные запросы, но достаточно для простого варианта использования. Вот как мы можем получить список статей, созданных данным пользователем:

Мы не указали ни смещение, ни предел, поэтому они получат значения по умолчанию. Это означает, что вывод будет содержать не более 10 результатов, начиная с номера результата 0.

Это круто, но что если мы захотим упорядочить статьи по идентификатору узла (nid), чтобы показывать только последние статьи? Или фильтр по тегам? Или получить текст заголовка изображения, прикрепленного к медиа-объекту, связанному с первым событием, которое начинается после даты выпуска статьи?

Используйте The Views

Ответ таков: мы можем сделать это так, как мы обычно делаем это в Drupal - с целью. Интеграция представлений перенесена в отдельный проект, поэтому ее необходимо загружать с помощью composer (для composer требуется drupal / graphql_views ) из drupal.org или из GitHub ,

С включенным graphql_views мы можем добавить отображение GraphQL к любому представлению в системе.

С включенным graphql_views мы можем добавить отображение GraphQL к любому представлению в системе

Теперь мы можем сортировать результаты, фильтровать их по полям содержимого и добавлять отношения. У нас также есть возможность вернуть либо полные сущности, либо просто набор полей, либо даже результаты поиска, взятые прямо с поискового сервера.

У нас также есть возможность вернуть либо полные сущности, либо просто набор полей, либо даже результаты поиска, взятые прямо с поискового сервера

Контекстные фильтры, установленные в представлении, автоматически превращаются в аргументы поля GraphQL. Давайте посмотрим на пример:

Давайте посмотрим на пример:

Это поле представляет собой простое представление, показывающее узлы. Он имеет один контекстный фильтр - Content: Authored by - поэтому соответствующий тип ввода состоит только из одного поля:

Он имеет один контекстный фильтр - Content: Authored by - поэтому соответствующий тип ввода состоит только из одного поля:

и его тип строки установлен в Entity (как показано на скриншоте выше), поэтому результат будет иметь тип NodeArticle:

и его тип строки установлен в Entity (как показано на скриншоте выше), поэтому результат будет иметь тип NodeArticle:

Мы можем использовать поле так:

Интеграция представлений - довольно широкая тема, поэтому в следующем посте мы могли бы попытаться раскрыть ее более подробно. Есть еще несколько интересных аспектов, таких как сортировка, открытые фильтры и присоединение представлений к сущностям, поэтому мы сосредоточимся на этом, чтобы полностью ответить на вопрос Дэниела.

Для тех, кто интересуется серверной стороной, я бы порекомендовал отличную серию расширений GraphQL от Филиппа Мелаба. Первый пост, который объясняет, как создавать поля, находится здесь: Расширение GraphQL: часть 1 - поля ,

PS GraphQL Views пока не стабилен. На самом деле, две проблемы были обнаружены и исправлены в процессе написания этой статьи. Если вы обнаружили ошибку, пожалуйста, сообщите о ней GitHub или дайте нам знать в канале #graphql на Drupal Slack ,

Другие посты в серии

Похожие

LG K4 (2017) черный
Сравнить Написать отзыв + Android 8 ГБ памяти 5-мегапиксельная камера LG K4 (2017) Black, мощный корейский смартфон! Красивый экран К4 (2017) Черный это LG смартфон мощный и элегантный. Его размеры 144,7 х 72,6 х 7,9 мм
Проблемы программирования ботов отполированы
В последнее время тема у всех на слуху: грядет новая система лиг. Игроки конкурса Smash the Code уже испытали это, но некоторые вопросы остаются. Мы подумали, что дадим вам более подробную информацию об этом, чтобы помочь вам стать легендой! Стремление к веселью Техническая команда работает над этим проектом уже более месяца. После последнего конкурса ( Coders Strike Back ) мы все согласились, что сможем сделать соревнования по программированию ботов еще более увлекательными,
Форекс - рискованный бизнес, часть 1 - просто и сложно
Из статьи вы узнаете: - Почему Форекс - это «простой» бизнес - Каковы основные причины провалов инвестиций Если это так легко, почему это так сложно? С теоретической точки зрения, инвестирование в рынок Forex должно быть самым простым бизнесом, который только можно себе представить. На это указывают несколько фактов:
Как использовать Gmail как почтовый клиент для ПК за 7 простых шагов
Реклама Вы бы отказались от своего почтового клиента по умолчанию, если бы в Gmail было больше функций, похожих на настольные? Gmail является ведущим клиентом веб-почты, но настольные почтовые клиенты оставайся вещью Они привлекательны, потому что вы можете хранить свои электронные письма локально и получать к ним доступ в любое время. Что если Gmail мог
Как исправить ошибку Windows XP 105
... driverdoc/landing/"> инструменты для обновления драйверов такие как DriverDoc (созданный компанией, сертифицированной Microsoft Gold Partner) для автоматизации этого процесса. Шаг 5: Используйте функцию восстановления системы Windows, чтобы отменить последние системные изменения Восстановление
Что такое Bot wekings v.1.4.006.exe и как его исправить?
Скачать сейчас WinThruster 2019 - Сканировать ваш компьютер на наличие ошибок реестра в bot wekings v.1.4.006.exe Совместим с Windows 10, 8, 7, Vista, XP и 2000 Дополнительное предложение для WinThruster от Solvusoft | EULA | политика конфиденциальности |
Или фильтр по тегам?
Или получить текст заголовка изображения, прикрепленного к медиа-объекту, связанному с первым событием, которое начинается после даты выпуска статьи?
1.4.006.exe и как его исправить?