【发布时间】:2020-09-21 18:18:45
【问题描述】:
大家好,我正在尝试使用 TypeORM 和 postgres 从数据库中查询一些用户。
我有两个模型:Users和Grades,这是一对多的关系,User可以有多个等级
用户模型:
import {
Entity,
Column,
PrimaryGeneratedColumn,
ManyToOne,
OneToMany,
Index,
} from 'typeorm';
import { Grade } from './grade.entity';
@Entity('users')
export class User {
@PrimaryGeneratedColumn({ name: 'id', type: 'integer' })
id: number;
@Index()
@Column()
name: string;
@Column()
surname: string;
@OneToMany(() => Grade, (grade) => grade.user, {
onUpdate: 'CASCADE',
onDelete: 'CASCADE',
cascade: true,
})
grades: Grades[];
}
等级模型。
import {
Entity,
Column,
PrimaryGeneratedColumn,
ManyToOne,
} from 'typeorm';
import { User } from './User.entity';
@Entity('grades')
export class Grade {
@PrimaryGeneratedColumn({ name: 'id', type: 'integer' })
id: number;
@Column()
value: string;
@ManyToOne(() => User, (asset) => user.grades)
user: User;
}
我有以下疑问:
this.createQueryBuilder('users')
.innerJoinAndSelect('users.grades', 'grade')
.where('grade.value IN (:5)', { ips })
.getMany();
问题是当查询运行时,它还会过滤用户内部的成绩
所以我有多个用户和这样的评分:
Users(name: 'John', surname: 'Doe')(name: 'Stiv', surname: 'Jovic ') and grades -> ( value: 1 ), ( value:2 ), ( value: 3 ), ( value:4 ), ( value:5), ( value:6), ( value:2)
我想得到所有 5 级的用户,所以我是这样得到的:
User(name: 'John) => grades (value: 1),(value: 2),(value: 5)
但知道我得到了 5 级的用户,但它也过滤了连接表,所以我得到这样的数据:
User(name: 'John') => grades (value:5)
【问题讨论】:
-
与您的问题无关,但是:Postgres 9.1 是no longer supported,您应该尽快计划升级。
-
我错误地添加了那个标签,谢谢..现在修复它
-
9.4 也不再支持
-
您能添加您的实体吗?而且我不确定我是否了解您到底想做什么。您要选择至少一个成绩为 5 的用户?
-
@noamsteiner 嗨,我添加了模型,我遇到的问题是我的 where 子句也过滤了成绩,但我只想按成绩过滤用户,并保留所有成绩
标签: postgresql typeorm