Я пытаюсь выяснить, как лучше всего обрабатывать отношения «один ко многим», используя type-graphql и typeorm с помощью postgresql db (используя сервер apollo с экспрессом). У меня есть таблица пользователей, которая имеет отношение «один ко многим» с таблицей курсов. В настоящее время я обрабатываю это с помощью поля @RelationId для создания столбца userCourseIds, а затем с помощью @FieldResolver с загрузчиком данных для пакетной выборки курсов, принадлежащих этому пользователю (-ам). Моя проблема в том, что с полем @RelationId делается отдельный запрос для получения идентификаторов отношений, независимо от того, действительно ли я запрашиваю userCourses. Есть ли способ справиться с этим, когда он не будет делать этот дополнительный запрос, или есть лучший способ справиться с отношениями «один ко многим»?
Пользовательская сторона отношения:
@OneToMany(() => Course, (course) => course.creator, { cascade: true })
userCourses: Course[];
@RelationId((user: User) => user.userCourses)
userCourseIds: string;
Курсовая сторона отношения:
@Field()
@Column()
creatorId: string;
@ManyToOne(() => User, (user) => user.userCourses)
creator: User;
userCourses FieldResolver:
@FieldResolver(() => [Course], { nullable: true })
async userCourses(@Root() user: User, @Ctx() { courseLoader }: MyContext) {
const userCourses = await courseLoader.loadMany(user.userCourseIds);
return userCourses;
}