Database
 sql >> Datenbank >  >> RDS >> Database

Verwenden mehrerer Felder für einen eindeutigen Schlüssel in Prisma

Ich bin auf ein Problem mit Prisma gestoßen, durch das ich etwas Zeit verloren habe, also werde ich schreiben, wie ich es gelöst habe.

Das Modell hatte keine id Feld markiert als @id also habe ich einen @@unique() hinzugefügt um user zu sagen und tweet , definierte zusammen den unique beschränken.

model Like {
  user      Int
  tweet     Int
  createdAt DateTime @default(now())
  @@unique([user, tweet])
}

Das bedeutet, dass wir nicht mehr als 1 gleiche Einträge von (user, tweet) haben können Einträge.

Als ich versuchte, einen Eintrag mit

zu löschen
await prisma.like.delete({
  where: {
    user: 1,
    tweet: 1
  }
})

Ich erhalte eine Fehlermeldung:

PrismaClientValidationError: 
Invalid `prisma.like.delete()` invocation:

{
  where: {
    user: 12,
    ~~~~
    tweet: 22
    ~~~~~
  }
  ~~~~~~~~~~~
}

Argument where of type LikeWhereUniqueInput needs exactly one argument, but you provided user and tweet. Please choose one. Available args: 
type LikeWhereUniqueInput {
  user_tweet?: LikeUserTweetCompoundUniqueInput
}

Was ich tun musste, war mich zu ändern

await prisma.like.delete({
  where: {
    user: 1,
    tweet: 1
  }
})

zu

await prisma.like.delete({
  where: {
    user_tweet: {
      user: 1,
      tweet: 1
    }
  }
})

Mit anderen Worten, die eindeutigen Felder zu kombinieren und mit einem Unterstrich zu verketten.

Im Nachhinein hat die Fehlermeldung das erklärt, aber ich habe es nicht verstanden.