我在使用 Prisma 遇到了一個問題,讓我浪費了一些時間,所以我將寫下我是如何解決它的。
模型中沒有一個標記為 @id
的 id
字段,所以我添加了一個 @@unique()
,表示 user
和 tweet
共同定義了唯一約束。
model Like {
user Int
tweet Int
createdAt DateTime @default(now())
@@unique([user, tweet])
}
這意味著我們不能有多個相同的 (user, tweet)
條目。
當我嘗試刪除一個條目時:
await prisma.like.delete({
where: {
user: 1,
tweet: 1
}
})
我遇到了以下錯誤消息:
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
}
我需要做的是將代碼更改為:
await prisma.like.delete({
where: {
user_tweet: {
user: 1,
tweet: 1
}
}
})
換句話說,將唯一鍵字段用底線連接起來。
回想起來,這個錯誤消息有點在解釋這一點,但我當時沒有理解到。