Prisma - 如何将两个字段指向同一模型?

2024-02-19

我很难概念化如何处理这个问题。我仔细研究了 Prisma 文档和其他 SO 问题,但它们似乎都与这种情况略有不同。

我有两个模型:

model User {
  id                Int               @id @default(autoincrement())
  firstName         String?           @map("first_name")
  lastName          String?           @map("last_name")
  email             String            @unique
  password          String
  role              UserRole          @default(value: USER)
  image             String?           @map("image")
  createdAt         DateTime          @default(now()) @map("created_at")
  updatedAt         DateTime          @updatedAt @map("updated_at")

  friends       Friend[]

  @@map("users")
}

model Friend {
  id               Int      @id @default(autoincrement())
  inviteSentOn     DateTime @map("invite_sent_on") @db.Timestamptz(1)
  inviteAcceptedOn DateTime @map("invite_accepted_on") @db.Timestamptz(1)
  userId           Int      @map("user_id")
  friendId         Int      @map("friend_id")
  createdAt        DateTime @default(now()) @map("created_at")
  updatedAt        DateTime @updatedAt @map("updated_at")

  user User @relation(fields: [userId], references: [id])
  // friend User? @relation(name: "FriendFriend", fields: [friendId], references: [id])

  @@map("friends")
}

我希望能够在 Friend 模型上设置关系,使其都指向 User 模型,但是我收到以下错误Error validating field 'friend' in model 'Friend': The relation field 'friend' on Model 'Friend' is missing an opposite relation field on the model 'User'.

我尝试将 name 属性添加到 @relation 字段,但开始收到有关检测到不明确关系的错误。

我该如何正确设置这些关系?


您只需提供name消除关系的歧义,如下所示:

model User {
  id Int @id @default(autoincrement())
  friend Friend? 
  friends Friend[] @relation(name: "friends")
}

model Friend {
  id       Int @id @default(autoincrement())
  userId   Int
  friendId Int
  user User @relation(fields: [userId], references: [id])
  friend User @relation(fields: [friendId], references: [id], name: "friends")
}

不要忘记,关系双方都需要与对方建立联系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Prisma - 如何将两个字段指向同一模型? 的相关文章

随机推荐