typeorm - 如何从 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();
解决方案
尝试这个:
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();
推荐阅读
- javascript - AsyncIterable 和 Observable 之间的实际区别是什么?
- shell - 如何搜索包含特定“关键字:字符串”对的文件并使用 awk 打印其全部内容?
- c - C Primer Plus 中的 while2.c
- javascript - JS+Jquery 递归点击
- elasticsearch - elasticsearch 需要添加一个必须到 bool 应该查询
- java - 休息后重复缩减计时器
- ios - 被删除错误iOS时拒绝resignFirstResponder
- android - editText字段在弹出窗口android中没有响应
- javascript - 在cli中转义特殊字符
- c - unsigned long long int 输出不工作