【发布时间】:2019-10-12 16:00:58
【问题描述】:
我想在 User Role Role_Type 之间创建一个 GraphQL 连接,最后通过查询返回用户角色类型.下面将其分解为唯一重要的代码行:
type Query {
getUsers: [User]
}
type User {
_id: ID
firstname: String
roles: [Role]
}
type Role {
_id: ID
role_type_id: ID
role_types: [Role_Type]
user_id: ID
}
type Role_Type {
_id: ID
name: String
}
在用户解析器中我有:
Query: {
getUser: async (root, { _id }) => {
return prepare(await DBUsers.findOne(ObjectId(_id)))
}
},
User: {
roles: async ({_id}) => {
return (await MongoDBRoles.find({user_id: _id}).toArray()).map(prepare)
}
}
对于角色解析器:
Role: {
role_types: async ({_id}) => {
return (await MongoDBRoleTypes.find({role_type_id: _id}).toArray()).map(prepare)
},
},
当我现在查询时:
{
getUser(_id: "5d555adcd2c22a242863f7a1") {
firstname
roles {
_id
role_type_id
user_id
role_types {
name
}
}
}
}
我明白了:
{
"data": {
"getUser": {
"firstname": "Gregor",
"roles": [
{
"_id": "5d90cf352f50882ab0ce3877",
"role_type_id": "5d90ce48b7893d19bcc328f9",
"user_id": "5d555adcd2c22a242863f7a1",
"role_types": []
}
]
}
}
}
但是为什么role_types 是空的。如您所见,role_type_id 已填满。那么为什么没有联系。
如果您需要更多架构/解析器,请告诉我。
【问题讨论】:
-
从上面还不清楚不同字段是如何相关的,但我假设根据你所说的
role_types与每个Role相关,根据其role_type_id。如果是这种情况,您的解析器与该字段不匹配 - 您正在使用角色的_id代替。 -
谢谢。所以你说通过替换
_id来更改role_types: async ({_id}) => { return (await MongoDBRoleTypes.find({role_type_id: _id}).toArray()).map(prepare) },?但对我来说,这看起来不错。 -
顺便说一句,我用@987654336 测试了你的想法@它也不起作用。