Prisma 查询解析器失败:“where 选择器的参数无效”

Posted

技术标签:

【中文标题】Prisma 查询解析器失败:“where 选择器的参数无效”【英文标题】:Prisma Query resolver fails: "invalid argument for the where selector" 【发布时间】: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")

【问题讨论】:

【参考方案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 )

【讨论】:

以上是关于Prisma 查询解析器失败:“where 选择器的参数无效”的主要内容,如果未能解决你的问题,请参考以下文章

Prisma GraphQL-Yoga:解析器需要异步吗?

Prisma:在突变解析器中使用计数

最好将 prisma 对象通过上下文传递给解析器还是直接使用它?

如何使用nexus-prisma做一个嵌套的变异解析器

将自定义 GraphQL 解析器和类型添加到 Prisma/Nexus 架构中

用于解析器 GraphQL 瑜伽的 TypeScript 类型(在上下文中使用 prisma2)