Я хочу создать API NestJs с TypeORM и иметь две сущности: пользователи и группы . Пользователь может присоединиться к нескольким группам, а в группе может быть несколько пользователей.
Я создал эти модели 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
игнорируется. База данных создает две кросс-таблицы
, но можно ожидать только одну кросс-таблицу, потому что одна из них избыточна, нет? Конечно, это может иметь технические причины. Как правильно выбрать субресурсы?