Prisma nexus crud 未正确生成模式
Posted
技术标签:
【中文标题】Prisma nexus crud 未正确生成模式【英文标题】:Prisma nexus crud not generating schema correctly 【发布时间】:2021-12-29 14:14:12 【问题描述】:我正在使用具有以下 prisma 架构的 prisma 和 nexus:
model User
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
username String @unique
posts Post[]
model Post
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String
description String
author User @relation(fields: [userId], references: [id])
userId String
我已经创建了这样的关系模型和突变:
export const Post = objectType(
name: 'Post',
definition(t)
t.model.id();
t.model.title();
t.model.description();
t.model.userId();
t.model.author();
t.model.updatedAt();
t.model.createdAt();
,
);
export const PostMutations = extendType(
type: 'Mutation',
definition(t)
t.crud.createOnePost();
,
)
我应该能够运行 graphql 突变来创建一个只有 userId
、title
和 description
的帖子。但是,nexus 生成的类型使得 author
字段在查询中是必需的。
以下是由nexus生成的:
type Mutation
createOnePost(data: PostCreateInput!): Post!
input PostCreateInput
author: UserCreateNestedOneWithoutPostsInput!
createdAt: DateTime
description: String!
id: String
title: String!
updatedAt: DateTime
注意 1:我注意到 nexus 生成了以下类型,但它没有在任何地方使用:
input PostCreateWithoutAuthorInput
createdAt: DateTime
description: String!
id: String
title: String!
updatedAt: DateTime
注意 2:我只添加了来自我的来源的相关代码
有人可以帮我弄清楚我可以在这里做什么吗?
使用的库:
"nexus-plugin-prisma": "^0.35.0"
“棱镜”:“^2.23.0”
"@prisma/client": "^2.23.0"
“关系”:“^1.0.0”
【问题讨论】:
【参考方案1】:Prisma 基本上需要某种方式将post
连接到user
。为此,您需要将author
参数与connect
对象一起传递,而不是直接指定userId
。
让我告诉你突变是什么样子的
mutation
createOnePost(data:
title: "Post Title",
description: "Post Description"
author:
connect:
id : "__USER_ID_GOES_HERE__"
)
id
您基本上仍然在传递 userId
,只是 prisma-nexus 为您生成的 API 期望 userId
通过 author.connect
而不是直接作为 userId
参数传递。
提示:使用 graphql playground 之类的东西探索自动生成的 GraphQL 模式是理解 nexus-prisma
生成的类型/参数的好方法。 API 也与prisma
本身非常相似,因此也应该提供一些直觉。
【讨论】:
以上是关于Prisma nexus crud 未正确生成模式的主要内容,如果未能解决你的问题,请参考以下文章
Nexus Prisma - 如何在全球范围内使用 crud 处理 createdAt 和 updatedAt?
无法生成 Prisma 客户端,outputDir.endsWith 不是函数