【发布时间】:2020-02-08 15:35:46
【问题描述】:
我想用 TypeORM 创建一个 NestJs API,并有两个实体,users 和 groups。一个用户可以加入多个群组,一个群组可以有多个用户。
我为用户创建了这些 ORM 模型
@Entity('User')
export class UserEntity {
@PrimaryGeneratedColumn()
id: number;
// ...
@ManyToMany((type: any) => GroupEntity, (group: GroupEntity) => group.users)
@JoinTable()
groups: GroupEntity[];
}
对于团体
@Entity('Group')
export class GroupEntity {
@PrimaryGeneratedColumn()
id: number;
// ...
@ManyToMany((type: any) => UserEntity, (user: UserEntity) => user.groups)
@JoinTable()
users: UserEntity[];
}
当调用路由GET localhost:3000/users/1/groups 时,我想返回用户所属的组数组。 UsersService 执行此操作
const groups: GroupEntity[] = await this.groupsRepository.find({
where: { userId: 1 },
relations: ['users'],
});
当调用路由GET localhost:3000/groups/1/users 时,我想返回该组持有的用户数组。 GroupsService 执行此操作
const users: UserEntity[] = await this.usersRepository.find({
where: { groupId: 1 },
relations: ['groups'],
});
不幸的是,两个端点都会返回每个嵌套的子资源。似乎where 子句被忽略了。数据库创建两个交叉表
但我希望只有一个交叉表,因为其中一个是多余的,不是吗?当然,这可能有技术原因。获取子资源的正确方法是什么?
【问题讨论】:
标签: javascript node.js typescript nestjs typeorm