sql >> Databasteknik >  >> RDS >> Database

Använder flera fält för en unik nyckel i Prisma

Jag stötte på ett problem med Prisma som fick mig att förlora lite tid, så jag ska skriva hur jag löste det.

Modellen hade inget id fält markerat som @id så jag lade till en @@unique() för att säga user och tweet , tillsammans, definierade den unique begränsa.

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

Det betyder att vi inte kan ha mer än 1 samma inmatning av (user, tweet) poster.

När jag försökte ta bort en post med

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

Jag stöter på ett felmeddelande:

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
}

Det jag var tvungen att göra var att ändra

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

till

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

Med andra ord, att kombinera de unika fälten som sammanfogar dem med ett understreck.

I efterhand förklarade felmeddelandet det här, men jag förstod det inte.


  1. MySQL Hur infogar man i en tabell med en SELECT-underfråga som returnerar flera rader?

  2. Tio sätt att ditt dataprojekt kommer att misslyckas på

  3. sqlLiteDatabase.query() för INNER JOIN

  4. Fortsätter Infogar i Oracle när undantag höjs