【问题标题】: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?
}

【问题讨论】:

    标签: sql orm prisma


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 2011-05-25
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多