【问题标题】:Prisma Query resolver fails: "invalid argument for the where selector"Prisma 查询解析器失败:“where 选择器的参数无效”
【发布时间】:2019-06-30 02:23:41
【问题描述】:

我使用 graphql yoga 服务器设置了 prisma,并且两个 GraphQL 游乐场都可用。

我可以成功创建一个我现在正在尝试检索的对话。我无法让这个简单的解析器在 Yoga GraphQL Playground 中工作:

const resolvers = {
    Query: {
        conversation(parent: any, { id }: { id: string }, { prisma }: Context) {
            return prisma.conversation( { id } )
        }
    },
    Mutation: mutation
}

我使用了这个查询:

query getConversation {
  conversation(where: {
    id: "cjrqzinj4004e0a30ch4pccml"
  }) {
    id
    title    
  }
}

错误信息是:

{
  "data": {
    "conversation": null
  },
  "errors": [
    {
      "message": "You provided an invalid argument for the where selector on Conversation.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "conversation"
      ],
      "code": 3040,
      "requestId": "local:cjrsahjoo00ai0a30a5y8mnvp"
    }
  ],
  "extensions": {}
}

查询在 Prisma GraphQL 操场上运行。

这是我的数据模型:

type User {
  id: ID! @unique
  oauthId: String! @unique
  display: String!
  picture: String!
  likes: [Comment!]! @relation(name: "Likes")
  dislikes: [Comment!]! @relation(name: "Dislikes")
  bookmarks: [Comment!]! @relation(name: "Bookmarks")
  authorOf: [Comment!]! @relation(name: "Author")
  starterOf: [Conversation!]! @relation(name: "Starter")
}

type Attachment {
    id: ID! @unique
    name: String!
    createOn: DateTime!
    mediaType: String!
    comment: Comment! @relation(name: "Attachments")
}

type Comment {
    id: ID! @unique
    author: User! @relation(name: "Author")
    content: String!
    createDate: DateTime!
    parentConversation: Conversation @relation(name: "Conversation")
    parentComment: Comment @relation(name: "Replies")
    comments: [Comment!]! @relation(name: "Replies")
    bookmarkedBy: [User!]! @relation(name: "Bookmarks")
    likedBy: [User!]! @relation(name: "Likes")
    dislikedBy: [User!]! @relation(name: "Dislikes")
    attachments: [Attachment!]! @relation(name: "Attachments")
}

enum ParentType {
    Organization,
    Portfolio,
    Project,
    WbsComponent,
    WorkItem
}

type Parent {
    id: ID! @unique
    parent: String! @unique
    type: ParentType!
    conversations: [Conversation!]! @relation(name: "Parent")
}

type Conversation {
    id: ID! @unique
    parent: Parent! @relation(name: "Parent")
    organization: String!
    title: String!
    author: User! @relation(name: "Starter")
    createdOn: DateTime!
    comments: [Comment!]! @relation(name: "Conversation")
}

【问题讨论】:

    标签: graphql prisma-graphql


    【解决方案1】:

    可以尝试将where 属性传递给prisma 客户端

    const resolvers = {
        Query: {
            conversation(parent: any, { id }: { id: string }, { prisma }: Context) {
                return prisma.conversation( { where: { id } )
            }
        },
        Mutation: mutation
    }
    

    【讨论】:

    • 谢谢!我实际上在 Prisma 论坛上发布了这个,并得到了答案:export const conversation = ( parent: any, { where: { id } }: { where: ConversationWhereUniqueInput }, { prisma }: Context ): ConversationPromise => { return prisma.conversation({ id }) }
    【解决方案2】:

    我从 Prisma 论坛得到了答案。我做错了解构(注意ConversationWhereUniqueInput 是 prisma 提供的一种类型):

    export const conversation = (
        parent: any,
        { where: { id } }: { where: ConversationWhereUniqueInput },
        { prisma }: Context
    ): ConversationPromise => {
        return prisma.conversation({ id })
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      相关资源
      最近更新 更多