模型A在棱镜中的两个场(但一对一)上参考模型B



每个FileUpload应该只有一个"父";项目草稿。

每个ProjectDraft应该有两个不同的可选字段,每个字段都可以引用一个FileUpload。

如果我在原始SQL中这样做,我可能会在ProjectDraft上有两个字段,每个字段都是可选的,并引用一个FileUpload(通过id(。

这是我当前的模式:

model ProjectDraft {
id        String   @id @default(cuid())
name      String
heroImage             FileUpload?
otherImage            FileUpload?
}
model FileUpload {
id             String       @id @default(cuid())
fileKey        String       @unique
projectDraft   ProjectDraft @relation(fields: [projectDraftId], references: [id])
projectDraftId String       @unique
}

prisma format最初想在FileUpload模型上创建一个ProjectDraft ProjectDraft[]数组字段(我认为是一对多(,但这不是我想要的(这将允许FileUpload没有父级或多个父级(。

对于我当前的模式,prisma format表示:

Error validating model "ProjectDraft": Ambiguous relation detected. The fields `heroImage` and `otherImage` in model `ProjectDraft` both refer to `FileUpload`. Please provide different relation names for them by adding `@relation(<name>).

我可以为ProjectDraft字段添加关系名称,但这两个关系最终在FileUpload上是相同的(因为每个FileUpload应该只有一个父级(。

我做错了什么?我觉得我错过了一个基本的概念。

如果要将多个字段引用到另一个模型,则必须定义一个关系名称。

model ProjectDraft {
id   String @id @default(cuid())
name String
heroImageFileUploadId  String?
otherImageFileUploadId String?
heroImage              FileUpload? @relation("FileUploadHeroImage", fields: [heroImageFileUploadId], references: [id])
otherImage             FileUpload? @relation("FileUploadOtherImage", fields: [otherImageFileUploadId], references: [id])
FileUpload             FileUpload?
}
model FileUpload {
id                      String         @id @default(cuid())
fileKey                 String         @unique
projectDraft            ProjectDraft   @relation(fields: [projectDraftId], references: [id])
projectDraftId          String         @unique
ProjectDraftHeroImages  ProjectDraft[] @relation("FileUploadHeroImage")
ProjectDraftOtherImages ProjectDraft[] @relation("FileUploadOtherImage")
}

最新更新