У меня есть 3 объекта в моей базе данных, мы можем представить эти 3 (я сохранил только важные столбцы)
User
@PrimaryColumn()
nick: string
@OneToMany(type => Connection, connection => connection.user)
connections:Connection[]
Connection
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(type => User,user => user.connections)
user: User;
@ManyToOne(type => Stream)
stream: Stream;
Stream
@PrimaryGeneratedColumn()
id: number;
Я думаю, что у меня есть некоторые навыки построения запросов в типорме, но я застрял прямо сейчас при использовании подзапроса.
Что я хочу сделать? Присоединиться ко всем объектам пользователя в части объектов соединения (выберите несколько объектов соединения в качестве подзапроса => make leftJoin User-subquery => отфильтруйте результаты, чтобы получить соединения, которые не были найдены правой стороной (соединение), поэтому ID соединения равен NULL).
Что я пробовал?
let query = await connectionRepository
.createQueryBuilder('connection')
.subQuery()
.where("connection.id = :id",{id:1})
.select(['connection.id','connection.user AS nick'])
.getQuery();
const result = await userRepository.createQueryBuilder("user")
.leftJoinAndSelect("user.permissions", '(' + query + ')')
.where("user.nick = :nick")
.andWhere(`(${query}).id is null`)
.getMany();
Я также пытался использовать подзапрос без .getQuery (), но он все равно не сработал, я думаю, что могу написать подзапрос Ok, но тогда у меня проблема с его использованием во втором запросе (с атрибутами подзапроса et c.) Я также видел несколько примеров с лямбда-функции, но лямбда всегда была на первой позиции в leftJoin.
Спасибо за ответ :)