Database
 sql >> Base de Dados >  >> RDS >> Database

Usando vários campos para uma chave exclusiva no Prisma


Tive um problema com o Prisma que me fez perder um pouco de tempo, então vou escrever como resolvi.

O modelo não tinha um id campo marcado como @id então eu adicionei um @@unique() dizer user e tweet , juntos, definiram o unique restringir.
model Like {
  user      Int
  tweet     Int
  createdAt DateTime @default(now())
  @@unique([user, tweet])
}

Isso significa que não podemos ter mais de 1 entrada igual de (user, tweet) entradas.

Quando tentei excluir uma entrada com
await prisma.like.delete({
  where: {
    user: 1,
    tweet: 1
  }
})

Eu me deparo com uma mensagem de erro:
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
}

O que eu tinha que fazer era mudar
await prisma.like.delete({
  where: {
    user: 1,
    tweet: 1
  }
})

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

Em outras palavras, combinando os campos exclusivos concatenando-os com um sublinhado.

Em retrospecto, a mensagem de erro meio que explicava isso, mas não entendi.