1

我正在使用具有以下 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 突变来创建一个只有userId,titledescription. 但是,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”

4

1 回答 1

0

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

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

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

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

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

于 2021-11-19T22:07:22.900 回答