与附加字段的一对多关系

One-to-many relation with additional field

我正在使用模型用户和公会在 prisma 中创建模式。

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

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

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

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?
}

将现有用户添加到公会时,您可以按照以下方式进行操作。

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,
    },
  })
}

建模将完全取决于您的 personal/company preference/style,我已经为您的模式建模了:

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