Tive um problema com o Prisma que me fez perder um pouco de tempo, então vou escrever como resolvi.
O modelo não tinha um
id
campo marcado como @id
então eu adicionei um @@unique()
dizer user
e tweet
, juntos, definiram o unique
restringir. model Like {
user Int
tweet Int
createdAt DateTime @default(now())
@@unique([user, tweet])
}
Isso significa que não podemos ter mais de 1 entrada igual de
(user, tweet)
entradas. Quando tentei excluir uma entrada com
await prisma.like.delete({
where: {
user: 1,
tweet: 1
}
})
Eu me deparo com uma mensagem de erro:
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
}
O que eu tinha que fazer era mudar
await prisma.like.delete({
where: {
user: 1,
tweet: 1
}
})
para
await prisma.like.delete({
where: {
user_tweet: {
user: 1,
tweet: 1
}
}
})
Em outras palavras, combinando os campos exclusivos concatenando-os com um sublinhado.
Em retrospecto, a mensagem de erro meio que explicava isso, mas não entendi.