与附加字段的一对多关系

Posted

技术标签:

【中文标题】与附加字段的一对多关系【英文标题】:One-to-many relation with additional field 【发布时间】:2021-10-14 09:19:17 【问题描述】:

我正在使用模型 User 和 Guild 在 prisma 中创建模式。

用户可以有一个公会,也可以没有 公会可以有多个用户

现在我想添加一个用户在公会中的角色的附加字段。

实现这一目标的最佳方法是什么?

我可以将它们添加给用户,但我必须在代码中管理它,所有这些都为空或不为空。

enum GuildRole 
  MEMBER
  CO_LEADER
  LEADER


model Guild 
  id          Int       @id @default(autoincrement())
  name        String
  users       User[]


model User 
  id          Int       @id @default(autoincrement())
  username    String?   @unique

  guild       Guild?    @relation(fields: [guildId], references: [id])
  guildId     Int?
  guildRole   GuildRole?


【问题讨论】:

【参考方案1】:

将现有用户添加到公会时,您可以执行以下操作。

import  PrismaClient, GuildRole  from '@prisma/client'

const prisma = new PrismaClient()

// add user to guild
const addAnExistingUserToAGuild = async (userId: number, guildId: number, guildRole: GuildRole) => 
  return await prisma.user?.create(
    data: 
      guildId: guildId,
      userId: userId,
      guildRole: guildRole,
    ,
  )

建模将完全取决于您的个人/公司偏好/风格,我已将您的架构建模如下:

enum GuildRole 
  MEMBER
  CO_LEADER
  LEADER


model User 
  userId    Int        @id @default(autoincrement())
  username  String?    @unique
  guild     Guild?     @relation(fields: [guildId], references: [guildId])
  guildId   Int?
  guildRole GuildRole?


model Guild 
  guildId Int    @id @default(autoincrement())
  name    String
  users   User[]

更多关于如何创建一对多关系的示例在我们的文档中:

https://www.prisma.io/docs/concepts/components/prisma-schema/relations/one-to-many-relations

【讨论】:

以上是关于与附加字段的一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

Django Postgres ArrayField 与一对多关系

如何与 Spring 和 thymeleaf 创建一对多的关系?

EF Core 2.1:具有一对多关系的自引用实体生成附加列

建表关系

NSPredicate 与 AND 在一对多关系中

Hibernate 一对一对多多对多注解属性的总结