Tuve un problema con Prisma que me hizo perder un poco de tiempo, así que escribiré cómo lo resolví.
El modelo no tenía un id
campo marcado como @id
así que agregué un @@unique()
decir user
y tweet
, juntos, definieron el unique
restringir.
model Like {
user Int
tweet Int
createdAt DateTime @default(now())
@@unique([user, tweet])
}
Esto significa que no podemos tener más de 1 misma entrada de (user, tweet)
entradas.
Cuando traté de eliminar una entrada con
await prisma.like.delete({
where: {
user: 1,
tweet: 1
}
})
Me encuentro con un mensaje de error:
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
}
Lo que tenía que hacer era cambiar
await prisma.like.delete({
where: {
user: 1,
tweet: 1
}
})
a
await prisma.like.delete({
where: {
user_tweet: {
user: 1,
tweet: 1
}
}
})
En otras palabras, combinar los campos únicos concatenándolos con un guión bajo.
En retrospectiva, el mensaje de error explicaba esto, pero no lo entendí.