我使用的是Prisma 2,在连接与连接的模型具有隐式多对多关系的模型上的现有记录时遇到问题。
schema.prisma
model Event {
id Int @id @default(autoincrement())
performers Performer[]
}
model Performer {
id Int @id @default(autoincrement())
events Event[]
}
在运行了prisma迁移之后,我可以在postgres中看到,我确实创建了一个名为_EventToPerformer
的联接表。我在数据库中创建了一些执行者,当我试图创建一个事件并连接这些现有的执行者时,我无法。
const performers = await prisma.performer.findMany()
const event = await prisma.event.create({
data: {
performers: performers.map((p) => ({ id: p.id })),
},
include: {
performers: true,
},
});
对于上面的代码,我在传递给create函数的对象的data
属性上得到了相当神秘的typescript错误。当我用@ts-ignore
抑制时,我得到了以下棱镜客户端错误:
Unknown arg `performers` in data.performers for type EventUncheckedCreateInput. Available args:
type EventUncheckedCreateInput {
id?: Int
}
在建立隐含的多对多关系和/或将现有记录附加到这些模型时,我是否明显缺少了什么?
您缺少一个connect
。所以你的代码应该看起来像:
const performers = await prisma.performer.findMany()
const event = await prisma.event.create({
data: {
performers: {
connect: performers.map((p) => ({ id: p.id })),
}
},
include: {
performers: true,
},
});
你可以在这里阅读更多关于处理关系的信息