【问题标题】:What is the best way to model a one-to-many relationship that also has a "selected" object in Prisma?建模在 Prisma 中也具有“选定”对象的一对多关系的最佳方法是什么?
【发布时间】:2021-12-21 09:28:02
【问题描述】:

在我们的应用中,用户可以是许多组织的成员。在查看该站点时,他们通常是通过其中一个组织查看它。这是选定的组织。

下面的模型是最好的建模方法吗?有没有办法对其进行建模,这样您就不必在Membership 上使用selectedByselectedById,而只需在User 上使用selectedMembershipIdMembership 的外键?

model User {
  id                 Int          @id @default(autoincrement())
  memberships        Membership[] @relation("Memberships")
  selectedMembership Membership?  @relation("Selection")
}
model Membership {
  id           Int          @id @default(autoincrement())
  user         User         @relation("Memberships", fields: [userId], references: [id])
  userId       Int
  selectedBy   User?        @relation("Selection", fields: [selectedById], references: [id])
  selectedById Int?          @unique
  organization Organization @relation(fields: [orgId], references: [id])
  orgId        Int
  role         MemberRole

  @@unique([userId, orgId])
}

【问题讨论】:

    标签: prisma


    【解决方案1】:

    不可能精确地做你希望做的事。 prisma 中关系的语法要求有一个关系字段(据我所知,这是你不希望在你的架构中拥有的)。

    由于它是一对一的关系,如果你愿意,你可以反过来做,在User 一侧有一个selectedMembershipId 外键,并且只有selectedBy 关系字段在Membership 这边是这样的:

    model User {
      id                 Int          @id @default(autoincrement())
      memberships        Membership[] @relation("Memberships")
      selectedMembership Membership?  @relation("Selection", fields: [selectedMembershipId], references: [id])
      selectedMembershipId       Int?         @unique
    
    }
    
    model Membership {
      id         Int   @id @default(autoincrement())
      user       User  @relation("Memberships", fields: [userId], references: [id])
      userId     Int
      selectedBy User? @relation("Selection")
      ...
    }
    
    

    但是,这实际上是关于保留外键的哪一方的偏好问题。在我看来,您处理架构的方式是在 Prisma 中建模关系的最合理方式。

    【讨论】:

    • 好吧,我就是这么想的。我在这里发布了一个后续问题,当它是此问题的一部分时已关闭:stackoverflow.com/questions/69891527/…
    • 提供了回复,希望对您有所帮助:D。顺便说一句,我们有一个非常活跃的slack,如果您有更多问题或只是想了解更多关于 Prisma 的信息,可以查看它。
    • 谢谢,我去看看。你更喜欢在 slack、here 还是 github 上提问?
    • 我们尽量掌握这三个方面的问题,所以无论您最方便的是什么:D。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2012-04-25
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多