如何将项目添加到列表字段?

时间:2019-04-27 14:22:12

标签: graphql prisma

我想通过将memberId传递给graphql突变函数来将成员添加到chatRoom成员列表中。但是它弹出了一些错误。我已附加了与该问题相关的大多数代码,如下所示。请帮我弄清楚。我猜创建:{connect}可能是导致此问题的原因。

//这里是突变功能

async function addMemberToChatRoom(parent, args, context, info) {

  const member = await context.prisma.users({
    where: {
      id: args.memberId
    }
  });
  const chatRoom = await context.prisma.updateChatRoom({
    where: {
      id: args.roomId
    },
    data: {
      users: {
        create: {
          { connect: { id: args.memberId } } 
        }
      }
    }
  })

  return chatRoom
}

//这是棱镜数据模型

type User {
  id: ID! @id
  name: String!
  email: String! @unique
  password: String!
}

type ChatRoom {
  id: ID! @id
  name: String!
  users: [User]!
}

type Message {
  id: ID! @id
  content: String!
  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt
}

//这里是Schema.graphql

type Query {
  info: String!
  users: [User!]!
}

type Mutation {
  signup(email: String!, password: String!, name: String!): AuthPayload
  login(email: String!, password: String!): AuthPayload
  createChatRoom(name: String!): ChatRoom
  addMemberToChatRoom(roomId: String!, memberId: String!): ChatRoom
}


type AuthPayload {
  token: String!
  user: User!
}

type User {
  id: ID!
  name: String!
  email: String!
}

type ChatRoom {
  id: ID!
  name: String!
  users: [User!]
}

//这里是index.js

const { GraphQLServer } = require('graphql-yoga')
const { prisma } = require('./generated/prisma-client')

const Query = require('./resolvers/Query')
const Mutation = require('./resolvers/Mutation')
// const User = require('./resolvers/User')
const resolvers = {
  Query,
  Mutation
}


const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
  context: request => {
    return {
      ...request,
      prisma,
    }
  },
  tracing: true,
})
server.start(() => console.log(`Server is running on http://localhost:4000`))

//这是错误

{
  "data": {
    "addMemberToChatRoom": null
  },
  "errors": [
    {
      "message": "Variable '$data' expected value of type 'ChatRoomUpdateInput!' but got: {\"users\":{\"create\":{\"id\":\"cjuzcf7lx75g60b953w50uwdc\"}}}. Reason: 'users.create[0].name' Expected non-null value, found null. (line 1, column 46):\nmutation ($where: ChatRoomWhereUniqueInput!, $data: ChatRoomUpdateInput!) {\n                                             ^",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "addMemberToChatRoom"
      ]
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

我删除创建并将其更改为

users: 
{
        connect: { id: args.memberId }
      } 

然后它起作用。

async function addMemberToChatRoom(parent, args, context, info) {

  const member = await context.prisma.users({
    where: {
      id: args.memberId
    }
  });
  const chatRoom = await context.prisma.updateChatRoom({
    where: {
      id: args.roomId
    },
    data: {
      users: {
        connect: { id: args.memberId }
      }
    }
  })

  const returnedChatRoom = await context.prisma.chatRooms({
    where: {
      id: args.roomId
    }
  });

  return returnedChatRoom
}