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

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

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
    }
  }
})

換句話說,將唯一鍵字段用底線連接起來。

回想起來,這個錯誤消息有點在解釋這一點,但我當時沒有理解到。