Prisma GraphQL模式和datamodel之间的同一字段可以有不同的类型吗?
我是Prisma/GraphQL的新手。我正在编写一个简单的ToDo应用程序,并使用Apollo Server 2和Prisma GraphQL作为后端。我想将我的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
createdAt
字段从数据模型转换为前端更可用的内容,如UTC日期字符串。我的想法是转换存储值,即日期时间
Mydatamodel.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
文件,其中添加的
字段的类型为字符串代码>