sql >> Base de Datos >  >> RDS >> Database

Uso de múltiples campos para una clave única en Prisma

Tuve un problema con Prisma que me hizo perder un poco de tiempo, así que escribiré cómo lo resolví.

El modelo no tenía un id campo marcado como @id así que agregué un @@unique() decir user y tweet , juntos, definieron el unique restringir.

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

Esto significa que no podemos tener más de 1 misma entrada de (user, tweet) entradas.

Cuando traté de eliminar una entrada con

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

Me encuentro con un mensaje de error:

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
}

Lo que tenía que hacer era cambiar

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

a

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

En otras palabras, combinar los campos únicos concatenándolos con un guión bajo.

En retrospectiva, el mensaje de error explicaba esto, pero no lo entendí.