使用prisma和nest,我有以下多对多关系模式。
model Message {
id Int @id @default(autoincrement())
message String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
tags Tags[]
}
model Tags {
id Int @id @default(autoincrement())
tag String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
Message Message? @relation(fields: [messageId], references: [id])
messageId Int?
}
当我创建一条消息并分配标签时,它工作得很好。这里是create函数的一部分。
create(createMessageDto: CreateMessageDto) {
return this.prisma.message.create({
data: {
message: createMessageDto.message,
tags: {
connectOrCreate: createMessageDto.tag.map((tag) => ({
where: { tag: tag },
create: { tag: tag },
})),
},
},
});
}
这对每一条消息都很有效。但是当我在不同的消息中使用相同的标签时,只有最新的消息链接到标签。这似乎不是多对多的关系,而是一对多的关系。
我犯的错误在哪里?
www.example.com和SO中的所有文档prima.io都无法提供帮助。
1条答案
按热度按时间g6ll5ycj1#
在您当前的Prisma模式中,Message和Tags之间的关系没有定义为多对多关系,而是一对多关系。显式的多对多关系涉及一个中间“联接表”,它连接另外两个表。
在这个模式中,
MessageTag
是连接Message和Tags的连接表。MessageTag中的每一行都表示一条消息和一个标记之间的链接,一条消息或标记可以链接到多行。