MongoDB Prisma一对一关系配置报错问题咨询
解决Prisma MongoDB双向一对一关系配置报错问题
错误原因
你遇到的报错是因为Prisma对一对一关系的规则限制:同一个关系只能在其中一侧定义fields和references参数,另一侧仅需通过关系名称关联即可,不能两边同时指定这两个参数。你的配置中未指定关系名称,Prisma将两侧的@relation视为同一个关系,因此触发错误。
正确配置方案
根据你的需求,分两种场景给出配置方式:
场景1:单向外键实现双向查询(推荐)
这种方式仅在一侧设置外键字段,通过关系名称实现双向关联查询,无需维护双向外键,逻辑更简洁:
model A { id String @id @default(auto()) @map("_id") @db.ObjectId // 定义A到B的关系,指定外键字段bId b B @relation(name: "ABOneToOne", fields: [bId], references: [id]) bId String @unique @db.ObjectId } model B { id String @id @default(auto()) @map("_id") @db.ObjectId // 通过关系名称反向关联A,无需指定fields和references a A? @relation(name: "ABOneToOne") }
场景2:双向持有外键(需手动维护一致性)
如果你确实需要两边都保留外键字段,需要将两个方向的关系定义为独立的一对一关系,分别指定不同的关系名称:
model A { id String @id @default(auto()) @map("_id") @db.ObjectId // A到B的独立关系 b B @relation(name: "AtoB", fields: [bId], references: [id]) bId String @unique @db.ObjectId } model B { id String @id @default(auto()) @map("_id") @db.ObjectId // B到A的独立关系 a A @relation(name: "BtoA", fields: [aId], references: [id]) aId String @unique @db.ObjectId }
注意:这种配置下,Prisma不会自动同步两个外键的一致性,你需要在业务代码中手动维护
bId和aId的关联关系,避免出现数据不一致的情况。
内容的提问来源于stack exchange,提问作者Deepraj Das
相关产品推荐
相关产品推荐

