我有两个 Entity:
@Entity()
export class UserEntity {
@Column({ unique: true, nullable: false })
id: string
@ManyToMany(() => RoleEntity, (r) => r.users, {
cascade: true,
})
@JoinTable()
roles?: RoleEntity[]
}
@Entity()
export class RoleEntity {
@Column({ unique: true, nullable: false })
name: string
@ManyToMany(() => UserEntity, (u) => u.roles)
users?: UserEntity[]
}
我想构造一个查询:
api.user.search({
roles: [
'admin',
'vip',
],
})
通过传递 RoleEntity.name 数组, 能查询到所有拥有这些 role 的 user, 只要 search.roles 和 user.roles 存在交集就能查询出来
也就是说, 王小明的 roles 是 ['loser', 'vip']
, 而我查询 ['admin', 'vip']
, 那么, 王小明也应该被查询出来, 因为他是 vip
但是我的方法报错 Cannot query across many-to-many for property roles
, 我的方法是:
userRepo.findAndCount({
where: {
roles: {
name: Raw((alias) => `${alias} @> ARRAY[:...roles]`, { roles: ['admin', 'vip'] }),
}
}
})
网上只有关于 roles 是数组时的查询, 但是我的 roles 是 Entity 数组, 是 many-to-many, 我只是个菜鸟前端, 实在搞不来了, 大佬们救救孩子吧
1
xiaoming1992 OP 做到了
userRepo.createQueryBuilder('user') .leftJoin('user.roles', 'role') .andWhere('role.name IN (:...roles)', { roles }) .getMany() |
2
xiaoming1992 OP @xiaoming1992 擦,并不是。。。
|