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

Utilizzo di più campi per una chiave univoca in Prisma

Ho riscontrato un problema con Prisma che mi ha fatto perdere un po' di tempo, quindi scriverò come l'ho risolto.

Il modello non aveva un id campo contrassegnato come @id quindi ho aggiunto un @@unique() per dire user e tweet , insieme, hanno definito l'unique vincolare.

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

Ciò significa che non possiamo avere più di una stessa voce di (user, tweet) voci.

Quando ho provato a eliminare una voce con

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

Mi imbatto in un messaggio di errore:

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
}

Quello che dovevo fare era cambiare

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

a

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

In altre parole, combinando i campi univoci concatenandoli con un trattino basso.

In retrospettiva, il messaggio di errore spiegava questo, ma non l'ho capito.