Можно ли сделать подзапрос внутри Sequelize JOIN? - PullRequest
0 голосов
/ 12 июня 2019

Я написал Postgres Query, который выполняет то, что я пытаюсь достичь, я хотел бы знать, возможно ли сделать это лучше с Sequelize, или мне лучше использовать простой запрос.

Я видел этот ответ , но он не может решить мою проблему, так как я не буду знать site_id поля, пока не сделаю запрос к полю.

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

Вот моя Схема базы данных для ссылки на концепцию. Сделано с использованием SqlDBM. Database Schema

  • Поле принадлежит сайту
  • Сайт принадлежит Клиенту

Пользователи могут иметь доступ к полю, сайту или клиенту, в зависимости от таблицы UserAccessMap, которая определяет, к какому уровню они имеют доступ.

SQL-запрос:

SELECT id, name
    FROM public."Field" AS field
        INNER JOIN public."UserAccessMap" AS userAccessMap
            ON userAccessMap.entity_id = field.id
            OR userAccessMap.entity_id = field.site_id
            OR userAccessMap.entity_id = (SELECT client_id FROM public."Site" WHERE id = field.site_id)
    WHERE  userAccessMap.user_id = 'Some User ID';

Проблемный запрос находится в последнем предложении OR в INNER JOIN, мне нужно выяснить, что такое Client ID, но я могу получить его только по запросу Site из идентификатора сайта Fields.

...