Написать запрос к БД с помощью ОРМ sequelize
Имеются две таблицы 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 нет других пользователей, которые также входят в данную комнату.
Ответы (1 шт):
Автор решения: Раниль Юскаев
→ Ссылка
Немного поменял свой код, теперь работает как должно:
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}
)`)
}
}
})
}
