Prisma ORM中创建User与Country双向关联时遇字段重复错误求助
解决Prisma关联重复字段报错问题
错误原因
你的User模型里重复定义了Country字段——一个是单个关联(用户所属国家),另一个是数组关联(用户创建的国家),字段名重复导致报错。同时Country模型里的关联命名也不清晰,没有区分两个不同的关联方向。
修正后的Schema代码
model User { id String @id @default(uuid()) name String @db.VarChar(255) surname String @db.VarChar(255) email String @unique(map: "email") @db.VarChar(255) password String @db.VarChar(255) phone String @db.VarChar(255) country_id String // 用户所属的国家(一对一关联,每个用户属于一个国家) ResidenceCountry Country @relation(name: "UserResidenceCountry", fields: [country_id], references: [id], onUpdate: Cascade, onDelete: Cascade) // 用户创建的国家(一对多关联,一个用户可以创建多个国家) CreatedCountries Country[] @relation(name: "CountryCreatedByUser") } model Country { id String @id @default(uuid()) name String @unique(map: "name") @db.VarChar(255) created_by String? // 创建这个国家的用户(可选一对一关联,一个国家可以有一个创建者) Creator User? @relation(name: "CountryCreatedByUser", fields: [created_by], references: [id], onUpdate: Cascade, onDelete: Cascade) createdAt DateTime @default(now()) @db.DateTime(0) updatedAt DateTime @default(now()) @db.DateTime(0) City City[] Vehicle Vehicle[] // 属于这个国家的所有用户(一对多反向关联) Residents User[] @relation(name: "UserResidenceCountry") }
关键修改说明
- 字段名唯一化:把User模型里重复的
Country字段分别命名为ResidenceCountry(用户所属国家)和CreatedCountries(用户创建的国家),避免重名冲突 - 关联命名绑定:给两个不同的关联分别指定唯一的
name参数(UserResidenceCountry和CountryCreatedByUser),让Prisma能区分这两个独立的关联关系 - 修正关联类型:Country模型里的
created_by关联是单个用户(不是数组),所以把原来的Users改为Creator,保持类型匹配 - 反向关联匹配:Country模型里的用户数组关联改名为
Residents,和User模型的ResidenceCountry关联通过name参数绑定,明确关联逻辑
内容的提问来源于stack exchange,提问作者n9p4
相关产品推荐
相关产品推荐

