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 idUser 实体中存储为 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 时直接将其写入 存储库文件 以获得更多的清洁度