在 Prisma 中模拟也有 "selected" 对象的一对多关系的最佳方法是什么?
What is the best way to model a one-to-many relationship that also has a "selected" object in Prisma?
在我们的应用中,一个用户可以是多个组织的成员。在查看站点时,他们通常是通过这些组织之一查看的。这是选定的组织。
下面的模型是最好的建模方法吗?有没有办法对其进行建模,这样您就不必在 Membership
上使用 selectedBy
和 selectedById
,只需在 User
上使用 selectedMembershipId
使用 Membership
?
的外键
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 中关系的语法要求有一个关系字段(据我所知,这是你不希望在你的模式中有的)。
因为它是一对一的关系,如果你愿意,你可以反过来做,在 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 中为关系建模的最合理方式。
在我们的应用中,一个用户可以是多个组织的成员。在查看站点时,他们通常是通过这些组织之一查看的。这是选定的组织。
下面的模型是最好的建模方法吗?有没有办法对其进行建模,这样您就不必在 Membership
上使用 selectedBy
和 selectedById
,只需在 User
上使用 selectedMembershipId
使用 Membership
?
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 中关系的语法要求有一个关系字段(据我所知,这是你不希望在你的模式中有的)。
因为它是一对一的关系,如果你愿意,你可以反过来做,在 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 中为关系建模的最合理方式。