在我的Prisma模式中,帖子和类别之间存在多对多的关系。我添加了@map
选项以匹配Postgres snake_case命名约定:
model Post {
id Int @id @default(autoincrement())
title String
body String?
categories PostCategory[]
@@map("post")
}
model Category {
id Int @id @default(autoincrement())
name String
posts PostCategory[]
@@map("category")
}
model PostCategory {
categoryId Int @map("category_id")
postId Int @map("post_id")
category Category @relation(fields: [categoryId], references: [id])
post Post @relation(fields: [postId], references: [id])
@@id([categoryId, postId])
@@map("post_category")
}
我正在尝试创建一个同时包含多个类别的帖子。如果类别存在,我想将该类别connect
到帖子中。如果类别不存在,我想创建它。创建部分工作正常,但连接部分有问题:
await prisma.post.create({
data: {
title: 'Hello',
categories: {
create: [{ category: { create: { name: 'News' } } }],
connect: {
categoryId_postId: { categoryId: 1, postId: ? }, // This doesn't work, even if I had the postId
},
},
},
});
如何将现有类别连接到具有我所拥有的架构的新帖子?
5条答案
按热度按时间dvtswwa31#
这里需要的是
connectOrCreate
。因此,应该可以这样做:
您还可以在此处的文档中阅读更多相关信息
mlnl4t2r2#
这个问题把我逼上了绝路,所以我在这里提出我的解决方案,以防它对其他人有帮助。首先,阅读以下内容:https://www.prisma.io/docs/concepts/components/prisma-schema/relations/many-to-many-relations
我的模式与上面讨论的模式类似,唯一的区别是我用Files代替了Posts,用Tags代替了Categories。为了将创建的文件的标签链接到现有的标签,我使用了以下代码:
3duebb1j3#
您应该连接到现有记录,然后创建要与第一个记录关联的记录。
https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries(连接现有记录)
3pmvbmvn4#
显式多对多创建/更新现有标签在此阅读更多
ohfgkhjo5#
经过几个小时的尝试,我终于为我的用例想出了下面的解决方案。
第一个