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