Как я могу добавить условие к запросу сущности Drupal 9, используя другой запрос сущности для другого типа сущности?
Я проиллюстрирую вопрос, описав один конкретный вариант использования, хотя не думаю, что будет сложно придумать сколько-нибудь правдоподобных вариантов использования.
Приложение для этого варианта использования отслеживает статьи в опубликованной медицинской литературе. Статья представлена пользовательским типом объекта, который отслеживает, когда она была импортирована в систему, был ли получен полный текст статьи, какие темы были присвоены статье, для каких циклов рецензирования, когда и в каком журнале она была опубликовано и много другой информации.
Второй тип настраиваемого объекта предназначен для представления пакетов («пакетов») статей, предназначенных для проверки, с отслеживанием того, когда были назначены пакеты, для каких тем и каким специалистам-онкологам, а также каковы были результаты этих обзоров. Статья может быть назначена многим пакетам обзора, каждому из которых назначено несколько рецензентов, и каждый пакет обзора может запрашивать обзоры для любого количества статей.
Модуль поиска для этого приложения требует, чтобы статьи можно было искать на основе множества различных критериев, большинство из которых можно применить, проверив Статья
сущности, но некоторые из них могут быть реализованы только путем просмотра значений в Пакет
сущности. Пример поиска может, например, потребовать найти все статьи, опубликованные за последние двенадцать месяцев в журнале J и назначенные для рецензирования рецензентом R.
В CMS, более подходящей для работы непосредственно с реляционными таблицами SQL, было бы очень просто поддерживать такой поиск, используя пару объединений таблиц. Но Drupal делает этот подход менее привлекательным, так как у нас нет документированной гарантии того, что соглашения об именовании таблиц и столбцов под сущностями не изменятся.
Я мог бы создать и выполнить два отдельных запроса сущностей и использовать результаты второго, чтобы отсеять результаты, возвращаемые первым запросом, которых нет в результатах второго. Но среди недостатков этого подхода тот факт, что он ломает механизм подкачки Drupal.
Я мог бы попытаться имитировать то, что СУБД будет делать гораздо эффективнее, передав идентификаторы сущностей, возвращенные вторым запросом, в условие первого запроса, но кто знает, какие внутренние ограничения могут возникнуть, когда результаты второго запроса огромный?
Я мог бы реализовать кладж для денормализации данных, сохраняя ссылки на сущности из Статья
сущности обратно в Пакет
сущности, которые, в свою очередь, указывают на Статья
сущности, но все мы знаем о проблемах с попыткой синхронизировать одну и ту же информацию в нескольких местах.
Если все поиски были для статей, предназначенных для обзора, я мог изменить ситуацию и использовать запрос сущности на Пакет
тип, после его ссылки на Статья
объекты для других критериев, которые необходимо проверить. Но большой процент поисков предназначен для поиска статей независимо от того, были ли они назначены для рецензирования или нет. Таким образом, для этого пути мне пришлось бы реализовать два отдельных набора логики поиска параллельно: один для поиска, который включает в себя назначение для просмотра пакетов, а второй — для поиска, который не заботится о назначении для просмотра. И этот подход по-прежнему не подходит для поиска статей, которые имеют нет был назначен на рассмотрение. И имейте в виду, что я делаю этот пример использования простым, ограничивая его только двумя типами сущностей.
Поиск в Google (и поиск по этому форуму) продолжает отвлекать меня к информации об использовании базовых API-интерфейсов запросов к базе данных вместо системы запросов сущностей, по крайней мере, с терминами запросов, которые я использую.
Есть ли способ использовать подзапрос (или, что еще лучше, присоединиться к другому типу сущности) в API запросов сущностей? Если нет, то есть ли перспективы поддержки такой обсуждаемой функциональности в Drupal Valhalla?