1

我有一个Advertisergraphql 类型:

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

4

2 回答 2

1

好问题埃利亚。

如果您使用 Nexus 来定义您的 GraphQL 类型,您可以使用objectType来定义您的架构类型。当与 Prisma 和 nexus-plugin-prisma 配对时,您可以使用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 服务器/Prisma 解析,并且您的客户端不需要传递参数,尽管它包含在inputTypeNexus 生成的参数中。

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

于 2020-12-30T11:01:32.823 回答
1

再次,发布此问题后立即找到答案。像这样简单地传递计算输入:

t.crud.createOneAdvertiser({
  computedInputs: {
    createdAt: () => DateTime.utc().toString(),
    updatedAt: () => null
  }
});
于 2020-12-27T14:53:36.367 回答