Как да добавите елемент в поле от списък?

Искам да добавя членове към списъка с членове на chatRoom, като предам memberId на функцията за мутация на graphql. Но изскача някои грешки. Прикачих повечето кодове, които са свързани с този въпрос, както е показано по-долу. Моля, помогнете ми да го разбера. Предполагам, че create: {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"
      ]
    }
  ]
}

person HE xinhao    schedule 27.04.2019    source източник
comment
users.create - предаден обект, трябва да бъде масив от обекти   -  person xadm    schedule 27.04.2019
comment
Все още изскача грешка, когато го променя, за да създаде: [ ]   -  person HE xinhao    schedule 28.04.2019


Отговори (1)


Премахвам create и го променям на

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
}
person HE xinhao    schedule 28.04.2019
comment
разбира се, не можете да използвате create или connect заедно. създайте нов потребител или свържете съществуващ потребител - person Gabriel Tong; 30.04.2019