【问题标题】:One-to-many and may-to-many relation between two prisma model两个棱镜模型之间的一对多和可能对多关系
【发布时间】:2021-09-28 07:21:53
【问题描述】:

我正在做一个附带项目,但遇到了一个不知道如何解决的问题。我创建了两个模型,一个用于用户,一个用于项目。它们之间的关系是多对多的,因为很多用户可以有很多项目,但我也想在项目模型中添加一个 createdBy,这应该是一对一的,因为每个项目只能有一个用户谁创造了它。这就是我的模型的外观:

model User {
  id            String         @id @default(cuid())
  name          String?
  email         String?        @unique
  emailVerified DateTime?
  image         String?
  createdAt     DateTime       @default(now())
  updatedAt     DateTime       @updatedAt
  accounts      Account[]
  sessions      Session[]
  projects      Project[]
  Project       Project[]      @relation("userId")
}

model Project {
  id             Int          @id @default(autoincrement())
  createdAt      DateTime     @default(now())
  name           String
  favourite      Boolean      @default(false)
  archived       Boolean      @default(false)
  users          User[]
  about          String?
  archivedAt     String?
  deletedAt      String?
  createdBy      User         @relation("userId", fields: [userId], references: [id])
  userId         String
}

从 prisma migrate dev 得到的错误是

第 1 步将所需的列 userId 添加到 Project 表中,但没有默认值。此表有 2 行,无法执行此步骤。

不知道我做错了什么,因为我几乎是一个数据库建模新手。任何帮助将不胜感激。

【问题讨论】:

    标签: prisma prisma2 plumatic-schema


    【解决方案1】:

    要使用One-To-Many 实现Many-to-Many,您需要将schema.prisma 文件设置为:

    model User {
      id            String    @id @default(cuid())
      name          String?
      email         String?   @unique
      emailVerified DateTime?
      image         String?
      createdAt     DateTime  @default(now())
      updatedAt     DateTime  @updatedAt
    
      projects Project[]
    
      userProjects UserProjects[]
    }
    
    model Project {
      id         Int      @id @default(autoincrement())
      createdAt  DateTime @default(now())
      name       String
      favourite  Boolean  @default(false)
      archived   Boolean  @default(false)
      about      String?
      archivedAt String?
      deletedAt  String?
    
      createdBy User   @relation(fields: [user_id], references: [id])
      user_id   String
    
      projectUsers UserProjects[]
    }
    
    model UserProjects {
      project    Project @relation(fields: [project_id], references: [id])
      project_id Int
      user       User    @relation(fields: [user_id], references: [id])
      user_id    String
    
      @@id([project_id, user_id])
    }
    

    它应该会成功迁移。

    【讨论】:

    • 但这不是多对多和第二个多对多吗?
    猜你喜欢
    • 2022-01-19
    • 2017-06-10
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多