我正在尝试找出实现以下架构的 upsert/更新的正确方法:
model Post {
author String @Id
lastUpdated DateTime @default(now())
categories Category[]
}
model Category {
id Int @id
posts Post[]
}
这是我想要做的。获取附加了类别 ID 的帖子并将其插入到上面的架构中。
出现以下命令插入帖子
const post = await prisma.post.upsert({
where:{
author: 'TK'
},
update:{
lastUpdated: new Date()
},
create: {
author: 'TK'
}})
我面临的挑战是如何更新类别。我将获得类似 1,2,3 的 Catogories 列表,如果它们不存在,我需要将其插入到类别表中并将帖子添加到其中。如果该类别确实存在,我需要使用上面插入的帖子更新记录,保留所有附加的帖子。
如果我能指出正确的方向,我将不胜感激。
答案 0 :(得分:3)
对于模型,可以简化如下,因为 Prisma 支持 @updatedAt
会自动更新列:
model Post {
author String @id
lastUpdated DateTime @updatedAt
categories Category[]
}
model Category {
id Int @id
posts Post[]
}
至于查询,它看起来像这样:
const categories = [
{ create: { id: 1 }, where: { id: 1 } },
{ create: { id: 2 }, where: { id: 2 } },
]
await db.post.upsert({
where: { author: 'author' },
create: {
author: 'author',
categories: {
connectOrCreate: categories,
},
},
update: {
categories: { connectOrCreate: categories },
},
})
connectOrCreate 将创建(如果不存在)并将类别添加到帖子中。