Я устанавливаю NestJS GraphQL API, который использует TypeORM, и у меня возникают проблемы с реализацией отношений между сущностями.
В частности, отношения TypeORM работают отлично, и сущности правильно связываются в базе данных. Однако проблема возникает, когда я пытаюсь запросить API, чтобы получить результаты.
Сейчас у меня есть 2 объекта, каждый со своим собственным распознавателем: пользователи и фотографии. Каждый пользователь может иметь несколько фотографий, в то время как каждая фотография подключена только к одному пользователю (многие-к-одному).
Вот как сущности связаны с TypeORM
Photo Entity, со связью с User Entity
@ManyToOne(type => User, user => user.photos, {
onDelete: 'CASCADE',
})
@JoinColumn()
user: User;
Пользовательский объект, завершающий соединение с Photo Entity
@OneToMany(type => Photo, photo => photo.user, {
eager: true,
})
photos: Photo[];
Этот код работает, и давайте получим фотографии пользователя
распознаватель пользователя
@ResolveProperty('photos')
async photos(@Parent() user): Promise<Photo[]> {
return await this.service.readPhotos(user.id);
}
Сервис пользователя
async readPhotos(userId): Promise<Photo[]> {
return await this.photoRepository.find({
where: {
user: userId
}
});
}
* Обратите внимание, что photoRepository может быть отфильтрован по полю пользователя. *
Этот код, однако, не работает. Это должно позволить нам посмотреть, какой пользователь подключен к фотографии, вместо этого он возвращает ноль.
Разрешение фотографий
@ResolveProperty('user')
async user(@Parent() photo): Promise<User> {
console.log(photo);
return await this.service.readUser(photo.user);
}
Кажется, в этом преобразователе фотографий есть проблема; объект photo, выводимый консолью, указывает на то, что, хотя у объекта photo @Parent имеются все его статические поля (например, ID, datePublished, URL), по какой-то причине фактическое поле пользователя здесь недоступно. Таким образом, переменная photo.user равна нулю.
* Обратите внимание, что это, похоже, указывает на то, что photoRepository НЕДОПУСТИМО, чтобы отфильтровать через / получить доступ к полю 'user'. *
Фотоуслуги
async readUser(userId): Promise<User> {
return await this.userRepository.findOne({
where: {
user: userId
}
});
}
Возвращает значение NULL, поскольку userId пуст, поскольку предыдущий преобразователь фотографий не может получить доступ к полю 'user'.
Заключение
Почему преобразователь фотографий не может получить доступ к полю @Parent photo user? Похоже, что пользовательский сервис может нормально фильтровать по полю «пользователь», но я не могу напрямую получить доступ к полю «Пользователь» фото.
Спасибо за любую помощь в этом! Я был в тупике за последние два дня ...