首页 > 解决方案 > 如何从 typeorm 中的主要实体和关系中过滤?

问题描述

我有两个名为 user 和权限的实体,如下所示:

用户:

@ObjectType()
@Entity()
export class User {
  @Field()
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Authorized()
  @Field()
  @Column()
  @Index({
    unique: true,
  })
  email!: string;

  @Field()
  @Column()
  name!: string;

  @ManyToMany(
    type => Permission,
    permission => permission.users,
  )
  @JoinTable()
  @Field(type => [Permission])
  permissions: Permission[];
}

允许:

@ObjectType()
@Entity()
export class Permission {
  @Field()
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Field()
  @Column()
  @Index({
    unique: true,
  })
  name!: string;

  @ManyToMany(
    type => User,
    user => user.permissions,
  )
  @Field(type => [User])
  users: User[];
}

现在我需要做的是查看电子邮件标识的用户是否user@example.com具有名称标识的权限readData。我尝试通过以下方式进行操作,但没有成功:

const userWithPermission = await userRepository
    .createQueryBuilder('user')
      .where('user.email = :email', { email: 'user@example.com' })
      .leftJoinAndSelect('user.permissions', 'permission')
      .where('permission.name = :name', { name: 'readData' })
      .execute();

标签: typeorm

解决方案


尝试这个:

const userWithPermission = await userRepository
  .createQueryBuilder("user")
  .where("(user.email = :email) AND (permission.name = :name)", {
    email: 'user@example.com',
    name: 'readData'
  })
  .leftJoinAndSelect("user.permissions", "permission")
  .execute();

推荐阅读