Prisma错误信息处理-使用多个字段作为唯一键

417 阅读1分钟

我在使用Prisma时遇到了一个问题,使我损失了一些时间,所以我将写下我是如何解决的。

该模型没有一个id 字段标记为@id ,所以我添加了一个@@unique() ,说usertweet ,一起定义了unique 的约束。

model Like {
  user      Int
  tweet     Int
  createdAt DateTime @default(now())
  @@unique([user, tweet])
}

这意味着我们不能有多于1个相同的(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: 1,
    tweet: 1
  }
})

await prisma.like.delete({
  where: {
    user_tweet: {
      user: 1,
      tweet: 1
    }
  }
})

换句话说,把唯一的字段与下划线连接起来。

现在回想起来,这条错误信息有点像在解释这个问题,但我没有理解它。