Graphql 从字段解析程序上的父节点获取数据
因此,如果可能的话,我想做的是使一个Graphql 从字段解析程序上的父节点获取数据,graphql,Graphql,因此,如果可能的话,我想做的是使一个GraphQL像这样: { people { _id name acted { _id title coactors { name } } } } 所以我要做的是,找演员(人),然后找他们演的电影,这很好。所以我想让那部电影里的演员们一起演。我想将当前参与者的id作为如下参数传递给co-actors字段: { people { _id
GraphQL
像这样:
{
people {
_id
name
acted {
_id
title
coactors {
name
}
}
}
}
所以我要做的是,找演员(人),然后找他们演的电影,这很好。所以我想让那部电影里的演员们一起演。我想将当前参与者的id作为如下参数传递给co-actors字段:
{
people {
_id
name
acted {
_id
title
coactors(actor: people._id) {
name
}
}
}
}
显然,我得到了一个错误,不知道是否可以在内部作出
以下是我的类型:
const MovieType = new GraphQLObjectType({
name: 'movie',
fields: () => ({
_id: {
type: GraphQLInt
},
title: {
type: GraphQLString
},
tagline: {
type: GraphQLString
},
released: {
type: GraphQLInt
},
actors: {
type: new GraphQLList(PersonType),
resolve: (movie) => {
return [];
}
},
coactors: {
type: new GraphQLList(PersonType),
args: {
actor: {
type: GraphQLInt
}
},
resolve: (movie, args) => {
getCoActorsFor(movie, args.actor) // How can I do something like this
.then((actors) => {
return actors;
})
}
}
})
});
const PersonType = new GraphQLObjectType({
name: 'person',
fields: ()=> ({
_id: {
type: GraphQLInt
},
name: {
type: GraphQLString
},
born: {
type: GraphQLInt
},
acted: {
type: new GraphQLList(MovieType),
resolve: (person) => {
return [];
}
}
})
});
const MovieType=新的GraphQLObjectType({
名称:"电影",,
字段:()=>({
_身份证:{
类型:GraphQLInt
},
标题:{
类型:GraphQLString
},
标语:{
类型:GraphQLString
},
发布:{
类型:GraphQLInt
},
参与者:{
类型:新的GraphQList(PersonType),
解决:(电影)=>{
返回[];
}
},
合作者:{
类型:新的GraphQList(PersonType),
args:{
演员:{
类型:GraphQLInt
}
},
解析:(电影,args)=>{
getCoActorsFor(movie,args.actor)//我如何做这样的事情
.然后((演员)=>{
返回演员;
})
}
}
})
});
const PersonType=新的GraphQLObjectType({
姓名:'人',
字段:()=>({
_身份证:{
类型:GraphQLInt
},
姓名:{
类型:GraphQLString
},
出生:{
类型:GraphQLInt
},
行动:{
类型:新图形列表(MovieType),
解决:(人)=>{
返回[];
}
}
})
});
如果不将查询分为两个查询,这是不可能的,因此您需要将第一个查询的结果作为变量提供给参与者,以便参与者提供给第二个查询 与使用变量不同,您可以让“acted”返回的movies对象包含对actor的引用,而不是当您请求“coactors”时,您手头有这些信息来执行您试图执行的操作
然而,这种类型的API也是一种反模式——如果子对象依赖于父对象的上下文,那么缓存和理解就会困难得多。我想你应该问问自己,为什么一个电影对象除了返回演员外还必须返回coactor。如果协理者只是相同的参与者列表,但删除了原始参与者,那么这似乎很容易发生在客户机上,因为客户机上的上下文信息更容易获得 是的,我可以在客户端处理它,我想知道是否有一种方法可以访问父节点,我在想,当我们定义de QueryType(?)