Prisma nexus crud 未正确生成模式

Posted

技术标签:

【中文标题】Prisma nexus crud 未正确生成模式【英文标题】:Prisma nexus crud not generating schema correctly 【发布时间】:2021-12-29 14:14:12 【问题描述】:

我正在使用具有以下 prisma 架构的 prisma 和 nexus:

    model User 
      id           String    @id @default(uuid())
      createdAt    DateTime  @default(now())
      updatedAt    DateTime  @updatedAt
      username     String    @unique
      posts        Post[]
    
    
    model Post 
      id          String   @id @default(uuid())
      createdAt   DateTime @default(now())
      updatedAt   DateTime @updatedAt
      title       String
      description String
      author      User     @relation(fields: [userId], references: [id])
      userId      String
    

我已经创建了这样的关系模型和突变:

    export const Post = objectType(
        name: 'Post',
        definition(t) 
            t.model.id();
            t.model.title();
            t.model.description();
            t.model.userId();
            t.model.author();
            t.model.updatedAt();
            t.model.createdAt();
        ,
    );
    
    export const PostMutations = extendType(
        type: 'Mutation',
        definition(t) 
            t.crud.createOnePost();
        ,
    )

我应该能够运行 graphql 突变来创建一个只有 userIdtitledescription 的帖子。但是,nexus 生成的类型使得 author 字段在查询中是必需的。

以下是由nexus生成的:

    type Mutation 
      createOnePost(data: PostCreateInput!): Post!
    
    
    input PostCreateInput 
      author: UserCreateNestedOneWithoutPostsInput!
      createdAt: DateTime
      description: String!
      id: String
      title: String!
      updatedAt: DateTime
    

注意 1:我注意到 nexus 生成了以下类型,但它没有在任何地方使用:

    input PostCreateWithoutAuthorInput 
      createdAt: DateTime
      description: String!
      id: String
      title: String!
      updatedAt: DateTime
    

注意 2:我只添加了来自我的来源的相关代码

有人可以帮我弄清楚我可以在这里做什么吗?

使用的库:

"nexus-plugin-prisma": "^0.35.0"

“棱镜”:“^2.23.0”

"@prisma/client": "^2.23.0"

“关系”:“^1.0.0”

【问题讨论】:

【参考方案1】:

Prisma 基本上需要某种方式将post 连接到user。为此,您需要将author 参数与connect 对象一起传递,而不是直接指定userId

让我告诉你突变是什么样子的

mutation 
  createOnePost(data:
    title: "Post Title",
    description: "Post Description"
    author: 
      connect:
        id : "__USER_ID_GOES_HERE__"
      
    
  ) 
    id
  


您基本上仍然在传递 userId,只是 prisma-nexus 为您生成的 API 期望 userId 通过 author.connect 而不是直接作为 userId 参数传递。

提示:使用 graphql playground 之类的东西探索自动生成的 GraphQL 模式是理解 nexus-prisma 生成的类型/参数的好方法。 API 也与prisma 本身非常相似,因此也应该提供一些直觉。

【讨论】:

以上是关于Prisma nexus crud 未正确生成模式的主要内容,如果未能解决你的问题,请参考以下文章

Nexus Prisma - 如何在全球范围内使用 crud 处理 createdAt 和 updatedAt?

无法生成 Prisma 客户端,outputDir.endsWith 不是函数

使用 GraphQL、Nexus 和 Prisma 优化 SQL 查询

Nexus-prisma:排序嵌套连接

添加新字段后,Prisma Schema 未正确更新

Nexus GraphQL Prisma 事件字段