我有两种类型:Todo和Comment。
type Todo {
id: ID!
name: String
description: String
priority: Int
status: TodoStatus
comments: [Comment]
}
type Comment {
todoid: ID!
commentid: String!
content: String
}
然后我有一个查询getTodo,但问题是,如果要传递的字符串位于Comment的内容中,则我想包含一个内容arg来过滤注释(子项)。
getTodo(id: ID!, content: String!): Todo
我尝试将解析器附加到注释(在Todo下)。如果在此处添加过滤器,我将如何获得在getTodo(id:ID !, content:String!)中传递的ctx.args.content。
{
"version" : "2017-02-28",
"operation" : "Query",
"query" : {
## Provide a query expression. **
"expression": "todoid = :id",
"expressionValues" : {
":id" : {
"S" : "${ctx.args.id}"
}
}
},
"filter": {
"expression": "contains(content, :content)",
"expressionValues" : {
":content": {
"S": "${ctx.args.content}"
}
}
}
}
或者,如果我删除此过滤器并保留为:
{
"version" : "2017-02-28",
"operation" : "Query",
"query" : {
## Provide a query expression. **
"expression": "todoid = :id",
"expressionValues" : {
":id" : {
"S" : "${ctx.args.id}"
}
}
}
}
我将如何修改getTodo Resolver以获取注释(内容包含传递的字符串)? 我可以这样做吗(访问comment.content是否包含传递的内容字符串args):
{
"version" : "2017-02-28",
"operation" : "Query",
"query" : {
## Provide a query expression. **
"expression": "id = :id",
"expressionValues" : {
":id" : {
"S" : "${ctx.args.id}"
}
}
},
"filter": {
"expression": "contains(comments.content, :content)",
"expressionValues" : {
":content": {
"S": "${ctx.args.content}"
}
}
}
}
答案 0 :(得分:0)
您通过$ctx.args
访问的GraphQL参数在字段级别可用。因此,当您在解析Post.comments
字段时访问它们时,您只获取该字段和该字段上的所有参数。
因此,要获取内容字符串参数,可以将Todo
类型更新为:
type Todo {
id: ID!
name: String
description: String
priority: Int
status: TodoStatus
comments(content: String): [Comment]
}
另一种方法,如果您不想在Post.comments
字段中公开content参数,而又将参数保留在Query.getTodo
字段中,则可以通过源传递参数。在您的Query.getTodo
解析器中,您可以返回content
字段作为待办事项结果的一部分。然后,您将可以通过Todo.comments
在$ctx.source.content
解析器中访问它。