如何使用带有特定参数的 Nexus 的 Prisma 插件 crud

How to use Nexus' Prisma plugin crud with specific arguments

我有一个 Advertiser graphql 类型:

type Advertiser {
  createdAt: DateTime!
  id: Int!
  isActive: Boolean!
  name: String!
  updatedAt: DateTime
}

给定以下突变:

mutationType({
  definition(t) {
    t.crud.createOneAdvertiser();
  }
});

Nexus 生成此架构(如预期):

input AdvertiserCreateInput {
  createdAt: DateTime!
  isActive: Boolean!
  name: String!
  updatedAt: DateTime
}

type Mutation {
  createOneAdvertiser(data: AdvertiserCreateInput!): Advertiser!
}

问题是,如果我想省略一些参数怎么办?例如,我不希望客户端传递 createdAtupdatedAt。这些列应该在服务器中解析。

在此处查看(部分)文档 - https://nexusjs.org/docs/plugins/prisma/api#example-4

再一次,发布此问题后立即找到了答案。像这样简单地传递 computedInputs

t.crud.createOneAdvertiser({
  computedInputs: {
    createdAt: () => DateTime.utc().toString(),
    updatedAt: () => null
  }
});

Eliya 问得好。

如果您使用 Nexus 来定义您的 GraphQL 类型,您可以使用 objectType to define your schema types. When paired with Prisma and nexus-plugin-prisma, you can use t.model 将您的模式类型映射到 objectType 中的数据库模型。在定义您的 objectType 时,您可以选择省略数据库模型中的某些列。

这里有一个 Prisma 模型示例来演示这个概念:

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  updatedAt DateTime @updatedAt
}

定义 objectType 时,您可以包含 updatedAt 列:

import { objectType } from 'nexus'

const Post = objectType({
  name: 'Post',
  definition(t) {
    t.model.id()
    t.model.title()
    t.model.content()
    t.model.published()
    t.model.author()
    t.model.updatedAt()
  }
})

export default Post

updatedAt,在此示例中,将由 GraphQL server/Prisma 解析,尽管包含在 inputType 生成的 inputType 中,但您的客户端不需要传递参数联系。

我希望这能回答您的问题。如果您需要任何进一步的说明,请告诉我。