Написать запрос к БД с помощью ОРМ sequelize

Рейтинг: 0Ответов: 1Опубликовано: 22.05.2023

Имеются две таблицы users & rooms с отношением many-to-many. Необходимо вернуть массив rooms с полем users (список пользователей). В список users также должен входить пользователь с определенным id. Мой запрос:

async getRooms(userId: number): Promise<RoomEntity[]> {
    return this.roomRepository.findAll({
        where: {
            '$users.id$': userId
        },
        include: {
            model: UserEntity,
            through: { attributes: [] },
            attributes: {
                exclude: ['password']
            },
        },
    })
}

В ответе получаю следующее:
введите сюда описание изображения

Проблема в том, что в поле users нет других пользователей, которые также входят в данную комнату.

Ответы

▲ 0

Немного поменял свой код, теперь работает как должно:

async getRooms(userId: number): Promise<RoomEntity[]> {
    return this.roomRepository.findAll({
        include: {
            model: UserEntity,
            attributes: {exclude: ['password']},
            through: { attributes: [] },
        },
        where: {
            id: {
                [Op.in]: sequelize.literal(`(
                    SELECT "user-rooms"."roomId" 
                    FROM "user-rooms"
                    INNER JOIN "users" ON "users"."id"="user-rooms"."userId"
                    WHERE "user-rooms"."userId"=${userId}
                )`)
            }
        }
    })
}