TypeORM 查找 entity.array 包含 id 的实体
TypeORM find entities where entity.array contains id
我正在使用 NestJS + 打字稿。这是我的实体:
@Entity()
export class YearCourse {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToMany(() => User)
@JoinTable()
admins: User[];
}
现在给定 user
我想找到给定用户是管理员的所有 yearCourse
实体。
原型看起来像这样:
async getByUser(user: User): Promise<YearCourse[]> {
return this.yearCourseRepository.find({where: { admins.contains(user) }})
}
这显然行不通。如何实现这种类型的搜索?
要使用 TypeOrm 编写更高级的 SQL 查询,您可以使用 Query Builder.
考虑到您的 admin id 在 User
实体中存储为 adminId
(admin_id
),它应该如下所示:
// query builder name ('year') is completely customisable
return this.yearCourseRepository.createQueryBuilder('year')
// load "admins" relation (user entity) and select results as "admins"
.leftJoinAndSelect('year.admins', 'admins')
// search where users have the "user.id" as "adminId"
.where('admins.adminId = :id', { id: user.id })
// get many results
.getMany();
我建议您在使用 Query Builder 时直接将其写入 存储库文件 以获得更多的清洁度
我正在使用 NestJS + 打字稿。这是我的实体:
@Entity()
export class YearCourse {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToMany(() => User)
@JoinTable()
admins: User[];
}
现在给定 user
我想找到给定用户是管理员的所有 yearCourse
实体。
原型看起来像这样:
async getByUser(user: User): Promise<YearCourse[]> {
return this.yearCourseRepository.find({where: { admins.contains(user) }})
}
这显然行不通。如何实现这种类型的搜索?
要使用 TypeOrm 编写更高级的 SQL 查询,您可以使用 Query Builder.
考虑到您的 admin id 在 User
实体中存储为 adminId
(admin_id
),它应该如下所示:
// query builder name ('year') is completely customisable
return this.yearCourseRepository.createQueryBuilder('year')
// load "admins" relation (user entity) and select results as "admins"
.leftJoinAndSelect('year.admins', 'admins')
// search where users have the "user.id" as "adminId"
.where('admins.adminId = :id', { id: user.id })
// get many results
.getMany();
我建议您在使用 Query Builder 时直接将其写入 存储库文件 以获得更多的清洁度