Sequelize-запрос к методам Sequelize

Я использую Sequelize для проекта узла, но у меня возникли некоторые проблемы с преобразованием запроса в Sequelize способом.

Сценарий: у меня есть 2 таблицы (User и Event ) с отношением n:m через UserEvent table. В таблице UserEvent есть атрибут is_creator; мне нужен объект с именем события, идентификатором события и полем is_creator.

Образец:

[{
    id: 1,
    name: "Event",
    is_creator: true
}]

Вот запрос:

SELECT `Event`.`id`,`Event`.`name` as `Name`, `UserEvents`.`is_creator` AS `is_creator` FROM `Events` AS `Event` INNER JOIN (`UserEvents` INNER JOIN `Users` AS `Users` ON `Users`.`id` = `UserEvents`.`UserId`) ON `Event`.`id` = `UserEvents`.`EventId` AND `Users`.`id` = 1;

К сожалению, я не могу «перевести» его, чтобы Сиквелировать.

Фактический код:

var queryOptions: FindOptions = {
            include: [
                {
                    model: db.User,
                    where: {
                        id: user.id
                    }
                }
            ],
        };

Выполненный запрос:

SELECT `Event`.`id`, `Event`.`uuid`, `Event`.`image`, `Event`.`name`, `Event`.`start_at`, `Event`.`end_at`, `Event`.`location`, `Event`.`description`, `Event`.`createdAt`, `Event`.`updatedAt`, `Users`.`id` AS `Users.id`, `Users`.`uuid` AS `Users.uuid`, `Users`.`email` AS `Users.email`, `Users`.`password` AS `Users.password`, `Users`.`firstName` AS `Users.firstName`, `Users`.`lastName` AS `Users.lastName`, `Users`.`activationCode` AS `Users.activationCode`, `Users`.`resetCode` AS `Users.resetCode`, `Users`.`active` AS `Users.active`, `Users`.`dob` AS `Users.dob`, `Users`.`image` AS `Users.image`, `Users`.`createdAt` AS `Users.createdAt`, `Users`.`updatedAt` AS `Users.updatedAt`, `Users.UserEvent`.`uuid` AS `Users.UserEvent.uuid`, `Users.UserEvent`.`is_creator` AS `Users.UserEvent.is_creator`, `Users.UserEvent`.`createdAt` AS `Users.UserEvent.createdAt`, `Users.UserEvent`.`updatedAt` AS `Users.UserEvent.updatedAt`, `Users.UserEvent`.`UserId` AS `Users.UserEvent.UserId`, `Users.UserEvent`.`EventId` AS `Users.UserEvent.EventId` FROM `Events` AS `Event` INNER JOIN (`UserEvents` AS `Users.UserEvent` INNER JOIN `Users` AS `Users` ON `Users`.`id` = `Users.UserEvent`.`UserId`) ON `Event`.`id` = `Users.UserEvent`.`EventId` AND `Users`.`id` = 1;

Заранее спасибо за сотрудничество!

1 ответ

  1. Вы хотите ограничить количество столбцов, возвращаемых запросом?

    Вы можете посмотреть attributesвариант. Можно указать нужные поля таблицы.

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

    var queryOptions: FindOptions = {
            include: [
                {
                    model: db.User,
                    where: {
                        id: user.id
                    },
                    attributes: ['id', 'email', 'firstName']
                }
            ],
        };
    

    Аналогично можно добавить параметр атрибуты для таблицы UserEvents.

    PS: Я в настоящее время не имею достаточно репутации, чтобы добавить комментарии по вопросам. Иначе я бы так и сделал.