如何解决以数组作为输入的 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 条件而不是数组的对象。