簡體   English   中英

如何在 Prisma 中創建多對多連接表的一對多關系

[英]How to create one to many relationship from many to many join table in Prisma

我正在創建一個鍛煉應用程序,並想 model 用戶和鍛煉計划之間的關系。 一個用戶可以多次創建一個程序。

這是我的 Prisma 模型:

model User {
  id                      Int         @id @default(autoincrement())
  createdAt               DateTime    @default(now())
  email                   String      @unique
  firstName               String      @db.VarChar(50)
  lastName                String      @db.VarChar(50)
  password                String      @db.VarChar(191)
  
  programs                ProgramEnrollment[]
  
}

model ProgramEnrollment {
  program                 Program     @relation(fields: [programId], references: [id])
  programId               Int // relation scalar field (used in the `@relation` attribute above)
  user                    User @relation(fields: [userId], references: [id])
  userId                  Int // relation scalar field (used in the `@relation` attribute            
  assignedAt              DateTime @default(now())

  @@id([programId, userId])
}

model Program {
  id                    Int                 @id @default(autoincrement())
  name                  String   
  users                 ProgramEnrollment[]
}

上面的效果很好,但現在我想做的是讓用戶記錄他們的個人程序結果,所以我添加以下內容:

model ProgramEnrollment {
  program                 Program     @relation(fields: [programId], references: [id])
  programId               Int // relation scalar field (used in the `@relation` attribute above)
  user                    User @relation(fields: [userId], references: [id])
  userId                  Int // relation scalar field (used in the `@relation` attribute            
  assignedAt              DateTime @default(now())
  userProgram             UserProgram[] 

  @@id([programId, userId])
}

model UserProgram {
  id                        Int                 @id @default(autoincrement())
  name                      String

  userProgramEnrollment     ProgramEnrollment @relation(fields: [programEnrollmentId], references: [id])
  programEnrollmentId       Int // relation scalar field (used in the `@relation` attribute above)
} 

當我進行上述更改時,我收到以下錯誤:錯誤驗證:參數references必須僅引用相關 model ProgramEnrollment中的現有字段。 相關model中不存在以下字段:id

為什么它不允許我從多對多連接表創建一對多關系?

正如文檔所述,不能在關系字段上定義復合 ID ( @@id )。

您可能可以使用@@unique定義復合唯一約束,例如: @unique([programId, userId]) ,然后只需將常規自動生成的 id 用於ProgramEnrollment ,然后您就可以在關系中使用它UserProgram

我只需要稍微調整一下 UserProgram model 以考慮 ProgramEnrollment model 中的多字段 id。

model ProgramEnrollment {
  program                 Program     @relation(fields: [programId], references: [id])
  programId               Int // relation scalar field (used in the `@relation` attribute above)
  user                    User        @relation(fields: [userId], references: [id])
  userId                  Int // relation scalar field (used in the `@relation` attribute            
  assignedAt              DateTime    @default(now())
  userProgram             UserProgram[] 

  @@id([programId, userId])
}

model UserProgram {
  id                           Int                 @id @default(autoincrement())
  name                         String
  userProgramEnrollment        ProgramEnrollment @relation(fields: [programEnrollment_programId,  programEnrollment_userId], references: [programId, userId])
  programEnrollment_programId  Int
  programEnrollment_userId     Int 
} 

由於 ProgramEnrollment 使用兩個字段作為其 id,我們必須在 UserProgram model 中引用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM