如何解决以数组作为输入的 GraphQl 突变
How to resolve GraphQl mutations that have an array as the input
我是 GraphQL 的新手,我正在尝试解析具有数组输入类型的突变。我收到此错误
{
"data": {
"createSub": null
},
"errors": [
{
"message": "Variable '$data' expected value of type 'SubCreateInput!' but got: {\"apps\":[{\"name\":\"ma\",\"package\":\"me\",\"running\":true,\"isSysytem\":true}]}. Reason: 'apps' Expected 'AppListCreateManyInput', found not an object. (line 1, column 11):\nmutation ($data: SubCreateInput!) {\n ^",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"createSub"
]
}
]
}
这是我的架构
type Mutation {
createSub(input:subInput): Sub
}
input subInput{
apps: [AppListInput]
}
type Sub{
id: ID!
apps: [AppList]
}
type AppList {
id: ID!
name: String
package: String
running: Boolean
isSysytem: Boolean
}
input AppListInput {
name: String
package: String
running: Boolean
isSysytem: Boolean
}
这是我的解析器
function createSub(root, args, context) {
return context.prisma.createSub({
apps: args.input.apps
})
}
我在 Graphql 操场上发送的 mutation/payload 是这个
mutation{
createSub( input:{
apps: [{
name: "ma"
package: "me"
running: true
isSysytem: true
}],
})
{
apps{
name
}
}
}
当我 console.log(args.input.apps) 我得到这个
[ [Object: null prototype] { name: 'ma', package: 'me', running: true, isSysytem: true } ]
这是在模式
中生成的输入AppListCreateManyInput
input AppListCreateManyInput {
create: [AppListCreateInput!]
connect: [AppListWhereUniqueInput!]
}
请问我遗漏了什么?
您需要向 createSub
提供适当的对象,如 here 所示。因为 apps
是一个关系,所以您不能只传递一个 apps
的数组——毕竟,在创建 Sub
时,您可能想要创建新的应用程序并将它们关联起来到新创建的 Sub,或者只是将现有的应用程序关联到它。
return context.prisma.createSub({
apps: {
create: args.input.apps, // create takes an array of apps to create
}
})
如果您想连接现有应用程序而不是创建新应用程序,您可以使用 connect
而不是 create
并传入指定 where 条件而不是数组的对象。
我是 GraphQL 的新手,我正在尝试解析具有数组输入类型的突变。我收到此错误
{
"data": {
"createSub": null
},
"errors": [
{
"message": "Variable '$data' expected value of type 'SubCreateInput!' but got: {\"apps\":[{\"name\":\"ma\",\"package\":\"me\",\"running\":true,\"isSysytem\":true}]}. Reason: 'apps' Expected 'AppListCreateManyInput', found not an object. (line 1, column 11):\nmutation ($data: SubCreateInput!) {\n ^",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"createSub"
]
}
]
}
这是我的架构
type Mutation {
createSub(input:subInput): Sub
}
input subInput{
apps: [AppListInput]
}
type Sub{
id: ID!
apps: [AppList]
}
type AppList {
id: ID!
name: String
package: String
running: Boolean
isSysytem: Boolean
}
input AppListInput {
name: String
package: String
running: Boolean
isSysytem: Boolean
}
这是我的解析器
function createSub(root, args, context) {
return context.prisma.createSub({
apps: args.input.apps
})
}
我在 Graphql 操场上发送的 mutation/payload 是这个
mutation{
createSub( input:{
apps: [{
name: "ma"
package: "me"
running: true
isSysytem: true
}],
})
{
apps{
name
}
}
}
当我 console.log(args.input.apps) 我得到这个
[ [Object: null prototype] { name: 'ma', package: 'me', running: true, isSysytem: true } ]
这是在模式
中生成的输入AppListCreateManyInputinput AppListCreateManyInput {
create: [AppListCreateInput!]
connect: [AppListWhereUniqueInput!]
}
请问我遗漏了什么?
您需要向 createSub
提供适当的对象,如 here 所示。因为 apps
是一个关系,所以您不能只传递一个 apps
的数组——毕竟,在创建 Sub
时,您可能想要创建新的应用程序并将它们关联起来到新创建的 Sub,或者只是将现有的应用程序关联到它。
return context.prisma.createSub({
apps: {
create: args.input.apps, // create takes an array of apps to create
}
})
如果您想连接现有应用程序而不是创建新应用程序,您可以使用 connect
而不是 create
并传入指定 where 条件而不是数组的对象。