【问题标题】:How to use Nexus' Prisma plugin crud with specific arguments如何使用带有特定参数的 Nexus 的 Prisma 插件 crud
【发布时间】:2021-04-04 14:20:36
【问题描述】:

我有一个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

【问题讨论】:

    标签: graphql prisma nexus-js


    【解决方案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 解析,尽管包含在 Nexus 生成的 inputType 中,但您的客户端不需要传递参数。

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

    【讨论】:

    • 再次感谢您的帮助。但是,如果我们讨论的列不是updatedAt 怎么办?假设我有一种帐户。一个帐户有一个“信用”列。我想读它,但不想写它。您将如何处理这种情况?
    • 您可以在模型中使用? 运算符使列可以为空。 Nexus inputTypes 生成的字段也可以为空,这意味着您在创建/更新记录时不必包含该字段。该字段将是可读可写的(如果您想写入它)。是否要将列设为只读?
    • 它应该是只读的。意思是,只有服务器才能在上面写(例如身份验证令牌、信用等)
    【解决方案2】:

    再次,发布此问题后立即找到答案。只需像这样传递computedInputs

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

    【讨论】:

      猜你喜欢
      • 2021-12-29
      • 2021-04-05
      • 2019-10-18
      • 1970-01-01
      • 2020-09-06
      • 2020-02-03
      • 2021-08-22
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多