Node.js 如何从父级访问关系ID';NestJS/TypeORM中的s连接字段

Node.js 如何从父级访问关系ID';NestJS/TypeORM中的s连接字段,node.js,graphql,nestjs,typeorm,Node.js,Graphql,Nestjs,Typeorm,我正在建立一个利用TypeORM的NestJS GraphQLAPI,但在实现实体之间的关系时遇到了问题 具体来说,TypeORM关系工作得很好,实体在数据库中正确链接。然而,当我试图查询API以获得结果时,问题就出现了 现在我有两个实体,每个实体都有自己的解析器:用户和照片。每个用户可以有多张照片,而每张照片仅连接到一个用户(多对一) 以下是实体与TypeORM的链接方式 照片实体,与用户实体有关系 用户实体,完成与照片实体的连接 这段代码有效,让我们检索用户的照片 用户解析器 @Resolv

我正在建立一个利用TypeORM的NestJS GraphQLAPI,但在实现实体之间的关系时遇到了问题

具体来说,TypeORM关系工作得很好,实体在数据库中正确链接。然而,当我试图查询API以获得结果时,问题就出现了

现在我有两个实体,每个实体都有自己的解析器:用户和照片。每个用户可以有多张照片,而每张照片仅连接到一个用户(多对一)

以下是实体与TypeORM的链接方式 照片实体,与用户实体有关系

用户实体,完成与照片实体的连接

这段代码有效,让我们检索用户的照片 用户解析器

@ResolveProperty('photos'))
异步照片(@Parent()user):承诺{
返回等待此.service.readPhotos(user.id);
}
用户服务

async readPhotos(userId):承诺{
返回等待此。光电沉积。查找({
其中:{
用户:userId
}
});
}
*请注意,光电探测器可以通过“用户”字段进行过滤*

但是,此代码不起作用。它应该让我们查看哪个用户连接到照片,而不是返回null。 光分解器

@ResolveProperty('user'))
异步用户(@Parent()photo):承诺{
控制台日志(照片);
返回等待this.service.readUser(photo.user);
}
此照片解析程序似乎包含问题;控制台输出的照片对象表明,尽管@Parent照片对象的所有静态字段(如ID、datePublished、URL)都可用,但由于某种原因,实际的“用户”字段在此不可访问。因此'photo.user'变量为空。 *请注意,这似乎表明光电探测器无法通过“用户”字段进行过滤/访问*

摄影服务

async readUser(userId):承诺{
返回等待this.userRepository.findOne({
其中:{
用户:userId
}
});
}
由于先前的照片解析程序无法访问“用户”字段,用户ID为空,因此返回null

结论 为什么照片解析程序不能访问@Parent Photo“user”字段?用户服务似乎能够通过“用户”字段进行筛选,但我似乎无法直接访问照片“用户”字段


谢谢你在这方面的帮助!在过去的两天里,我一直被这个问题难住了…

所以你想访问这个用户,是吗<代码>照片。用户?在
FindOptions
中有一个名为“relations”的键,它将为您获取并应用该键。在你的例子中

async readPhotos(userId): Promise<Photo[]> {
    return await this.photoRepository.find({
        where: {
            user: userId
        },
        relations: ['user'],
    });
}
现在应该将
user.photos
作为
Photo
s的数组返回

您可以在这里找到更多的
FindOptions
用法示例


希望这有帮助

我遇到了一个类似的问题,尽管@bashleigh的解决方案在需要返回整个实体时有效,但我只需要id。因此,如果是这样,您可以传递
loadRelationId
选项,并将其设置为
true

return await this.photoRepository.find({
 where: {
  id: photoId
 },
 loadRelationIds: true
});

这将返回用户id(字符串或int)。

您也可以共享您的GraphQL模式吗?特别是照片和用户的定义
@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
        }
    });
}
@ResolveProperty('user')
async user(@Parent() photo): Promise<User> {
    console.log(photo);
    return await this.service.readUser(photo.user);
}
async readUser(userId): Promise<User> {
    return await this.userRepository.findOne({
        where: {
            user: userId
        }
    });
}
async readPhotos(userId): Promise<Photo[]> {
    return await this.photoRepository.find({
        where: {
            user: userId
        },
        relations: ['user'],
    });
}
async readUser(userId): Promise<User> {
    return await this.userRepository.findOne({
        where: {
            user: userId
        },
        relations: ['photos'],
    });
}
return await this.photoRepository.find({
 where: {
  id: photoId
 },
 loadRelationIds: true
});