如何将参数传递给 GraphQL 中的子属性
Posted
技术标签:
【中文标题】如何将参数传递给 GraphQL 中的子属性【英文标题】:How to pass params to child property in GraphQL 【发布时间】:2018-11-12 11:05:38 【问题描述】:我对 GraphQL 还很陌生,正在成为一个超级粉丝 :)
但是,我不清楚。我正在使用 Prisma 和 GraphQL-Yoga 和 Prisma 绑定。
我不知道如何将参数从我的 graphQL 服务器传递到子属性。不知道这是否清楚,但我会用代码显示它,希望更容易:)
这些是我的类型
type User
id: ID! @unique
name: String!
posts: [Post!]!
type Post
id: ID! @unique
title: String!
content: String!
published: Boolean! @default(value: "false")
author: User!
我的 schema.graphql
type Query
hello: String
posts(searchString: String): [Post]
users(searchString: String, searchPostsTitle: String): [User]
me(id: ID): User
和我的用户解析器:
import Context from "../../utils";
export const user =
hello: () => "world",
users: (parent, args, ctx: Context, info) =>
return ctx.db.query.users(
where:
OR: [
name_contains: args.searchString
,
posts_some: title_contains: args.searchPostsTitle
]
,
info
);
,
me: (parent, args, ctx: Context, info) =>
console.log("parent", parent);
console.log("args", args);
console.log("info", info);
console.log("end_________________");
return ctx.db.query.user( where: id: args.id , info);
;
和我的帖子解析器
import Context from "../../utils";
export const post =
posts: (parent, args, ctx: Context, info) =>
return ctx.db.query.posts(
where:
OR: [
title_contains: args.searchString
,
content_contains: args.searchString
]
,
info
);
;
所以,现在:)
当我在我的 prisma 服务上的 GraphQL 操场上时,我可以执行以下操作:
user(where: id: "cjhrx5kaplbu50b751a3at99d")
id
name
posts(first: 1, after: "cjhweuosv5nsq0b75yc18wb2v")
id
title
content
但是我不能在服务器上做,如果我做这样的事情..我收到错误:
"error": "Response not successful: Received status code 400"
这就是我正在尝试的:
me(id: "cjhrx5kaplbu50b751a3at99d")
id
name
posts(first:1)
id
title
content
有人知道我该怎么做吗?
【问题讨论】:
好的..我解决了 :) 有时它只需要在此处编写和解释时进行思考..我会将问题留给有同样问题的其他人.. 【参考方案1】:因为我有一个自定义类型的用户,帖子没有像生成的那样的参数。要么我使用生成的,要么修改它看起来像这样:
type User
id: ID!
name: String!
posts(where: PostWhereInput, orderBy: PostOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Post!]
编辑 2018 年 6 月 4 日
# import Post from './generated/prisma.graphql'
type Query
hello: String
posts(searchString: String): [Post]
users(searchString: String, where: UserWhereInput, orderBy: UserOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [User]
me(id: ID): User
type Mutation
createUser(name: String!): User
createPost(
title: String!
content: String!
published: Boolean!
userId: ID!
): Post
我从 prisma.graphql 手动复制了参数。
【讨论】:
可以分享一下新的schema.graphql
吗?您需要从新参数中导入类型 :)
是的!请注意,UserWhereInput
、UserOrderByInput
和 User
是从第一个留置权中的 import Post
语句“传递”导入的 :)以上是关于如何将参数传递给 GraphQL 中的子属性的主要内容,如果未能解决你的问题,请参考以下文章
Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?
将 unicode 参数传递给 ShellExecuteEx 中的子进程