Jag stötte på ett problem med Prisma som fick mig att förlora lite tid, så jag ska skriva hur jag löste det.
Modellen hade inget id
fält markerat som @id
så jag lade till en @@unique()
för att säga user
och tweet
, tillsammans, definierade den unique
begränsa.
model Like {
user Int
tweet Int
createdAt DateTime @default(now())
@@unique([user, tweet])
}
Det betyder att vi inte kan ha mer än 1 samma inmatning av (user, tweet)
poster.
När jag försökte ta bort en post med
await prisma.like.delete({
where: {
user: 1,
tweet: 1
}
})
Jag stöter på ett felmeddelande:
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
}
Det jag var tvungen att göra var att ändra
await prisma.like.delete({
where: {
user: 1,
tweet: 1
}
})
till
await prisma.like.delete({
where: {
user_tweet: {
user: 1,
tweet: 1
}
}
})
Med andra ord, att kombinera de unika fälten som sammanfogar dem med ett understreck.
I efterhand förklarade felmeddelandet det här, men jag förstod det inte.