求助 nestjs many-to-many 查询失败

2021-11-27 03:45:38 +08:00
 xiaoming1992

我有两个 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, 我只是个菜鸟前端, 实在搞不来了, 大佬们救救孩子吧

1198 次点击
所在节点    JavaScript
2 条回复
xiaoming1992
2021-11-27 20:07:32 +08:00
做到了

userRepo.createQueryBuilder('user')
.leftJoin('user.roles', 'role')
.andWhere('role.name IN (:...roles)', { roles })
.getMany()
xiaoming1992
2021-11-27 20:11:42 +08:00
@xiaoming1992 擦,并不是。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818293

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX