You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:42:56