Prisma GraphQL模式和datamodel之间的同一字段可以有不同的类型吗?

Prisma GraphQL模式和datamodel之间的同一字段可以有不同的类型吗?,graphql,apollo-server,prisma,prisma-graphql,Graphql,Apollo Server,Prisma,Prisma Graphql,我是Prisma/GraphQL的新手。我正在编写一个简单的ToDo应用程序,并使用Apollo Server 2和Prisma GraphQL作为后端。我想将我的createdAt字段从数据模型转换为前端更可用的内容,如UTC日期字符串。我的想法是转换存储值,即日期时间 Mydatamodel.prisma具有以下ToDo类型 type ToDo { id: ID! @id added: DateTime! @createdAt body: String! title: String user

我是Prisma/GraphQL的新手。我正在编写一个简单的ToDo应用程序,并使用Apollo Server 2和Prisma GraphQL作为后端。我想将我的
createdAt
字段从数据模型转换为前端更可用的内容,如UTC日期字符串。我的想法是转换存储值,即日期时间

My
datamodel.prisma
具有以下ToDo类型

type ToDo {
id: ID! @id
added: DateTime! @createdAt
body: String!
title: String
user: User!
completed: Boolean! @default(value: false)

}
添加的
字段是数据时间。但是在我的
schema.js
中,我将该字段列为字符串

 type ToDo {
    id: ID!
    title: String,
    added: String!
    body: String!
    user: User!
    completed: Boolean!

  }
我在解析器中转换它

 ToDo: {
    added: async (parent, args) => {
      const d = new Date(parent.added)
      return d.toUTCString()
    }
这样可以吗?也就是说,在
datamodel
schema
中,同一字段有不同的类型?它似乎工作正常,但我不知道我是否会在其他情况下采用这种技术,在今后的道路上给自己带来麻烦


如果是这样,我想知道的一件事是,为什么访问
ToDo.added
中的
parent.added
解析程序不会启动某种“无限循环”——也就是说,当访问
parent.added
字段时,它不会指望解析程序解析访问
parent.added
字段的字段,等等(我想这足够聪明了,不这样做吗?

我对Prisma的经验有限,但我知道你可以将它视为一个额外的后端GraphQL层,连接你自己的GraphQL服务器和你的数据(即数据库)

第一个模型(
datamodel.prisma
)使用增强的prisma语法和指令来准确描述数据,并由prisma层使用,而第二个模型使用标准GraphQL语法来实现与有效的标准GraphQL类型相同的对象,并由您自己的后端使用

实际上,如果您深入研究,您会发现Prisma使用的
DateTime
类型实际上是一个
字符串,但Prisma可能使用它来验证日期和时间格式等,因此这两个模型之间没有根本的差异。但即使存在差异,这也取决于您,因为您可以使用解析器覆盖从Prisma获得的数据,然后再从自己的后端返回数据

简而言之,我想说的是,您正在处理两个不同的GraphQL层:Prisma和您自己的。虽然Prisma的角色是准确地表示数据库中的数据,并为您提供大量CRUD方法来处理这些数据,但您自己的图层可以(也应该)根据您的具体需要进行定制

对于您的冲突解决程序问题,在该上下文中,
parent
将保存父冲突解决程序返回的对象。假设您在根
query
级别有一个
getTodo
查询,返回类型为
ToDo
的单个项。假设您将其解析为Prisma检索单个ToDo的默认操作。根据您的
datamodel.prisma
文件,此查询将解析为添加了
属性的对象(该属性将作为
createdAt
字段存在于数据库中,由
@createdAt
prisma指令指定)。因此
parent.added
将保留该值

添加的
解析器所做的是将原始数据段转换为实际的日期对象,然后将其格式化为UTC字符串,该字符串符合
schema.js
文件,其中添加的
字段的类型为
字符串