J'ai rencontré un problème avec Prisma qui m'a fait perdre un peu de temps, alors je vais écrire comment je l'ai résolu.
Le modèle n'avait pas d'id
champ marqué comme @id
donc j'ai ajouté un @@unique()
dire user
et tweet
, ensemble, ont défini le unique
contraindre.
model Like {
user Int
tweet Int
createdAt DateTime @default(now())
@@unique([user, tweet])
}
Cela signifie que nous ne pouvons pas avoir plus d'une même entrée de (user, tweet)
entrées.
Lorsque j'ai essayé de supprimer une entrée avec
await prisma.like.delete({
where: {
user: 1,
tweet: 1
}
})
Je rencontre un message d'erreur :
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
}
Ce que je devais faire était de changer
await prisma.like.delete({
where: {
user: 1,
tweet: 1
}
})
à
await prisma.like.delete({
where: {
user_tweet: {
user: 1,
tweet: 1
}
}
})
En d'autres termes, combiner les champs uniques en les concaténant avec un trait de soulignement.
Rétrospectivement, le message d'erreur expliquait en quelque sorte cela, mais je ne l'ai pas compris.