sql >> Database >  >> RDS >> Database

Meerdere velden gebruiken voor een unieke sleutel in Prisma

Ik kwam een ​​probleem tegen met Prisma waardoor ik wat tijd verloor, dus ik zal schrijven hoe ik het heb opgelost.

Het model had geen id veld gemarkeerd als @id dus ik heb een @@unique() . toegevoegd om user . te zeggen en tweet , samen, definieerden de unique beperken.

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

Dit betekent dat we niet meer dan 1 dezelfde invoer van (user, tweet) . kunnen hebben inzendingen.

Toen ik probeerde een invoer te verwijderen met

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

Ik kom een ​​foutmelding tegen:

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
}

Wat ik moest doen was veranderen

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

naar

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

Met andere woorden, door de unieke velden te combineren met een onderstrepingsteken.

Achteraf gezien was de foutmelding een soort van uitleg, maar ik heb het niet begrepen.


  1. Uw ultieme gids voor SQL-joins:OUTER JOIN - Deel 2

  2. MariaDB JSON_MERGE_PATCH() uitgelegd

  3. MariaDB UNION-operator uitgelegd

  4. Hoe bewaart u uuid als nummer?