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.