/

在 Prisma 中使用多個字段作為唯一鍵

在 Prisma 中使用多個字段作為唯一鍵

我在使用 Prisma 遇到了一個問題,讓我浪費了一些時間,所以我將寫下我是如何解決它的。

模型中沒有一個標記為 @idid 字段,所以我添加了一個 @@unique(),表示 usertweet 共同定義了唯一約束。

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”]