sql >> Database teknologi >  >> RDS >> Database

Brug af flere felter til en unik nøgle i Prisma

Jeg løb ind i et problem med Prisma, der fik mig til at miste lidt tid, så jeg vil skrive, hvordan jeg løste det.

Modellen havde ikke et id felt markeret som @id så jeg tilføjede en @@unique() at sige user og tweet , sammen definerede den unique begrænse.

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

Det betyder, at vi ikke kan have mere end 1 samme indtastning af (user, tweet) poster.

Da jeg forsøgte at slette en post med

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

Jeg støder på en fejlmeddelelse:

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, jeg skulle gøre, var at ændre

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

til

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

Med andre ord, ved at kombinere de unikke felter, der sammenkæder dem med en understregning.

Set i bakspejlet var fejlmeddelelsen en slags forklaring på dette, men jeg forstod det ikke.


  1. Vælg datatype for feltet i postgres

  2. Plan Explorer 3.0 Webinar – eksempler og spørgsmål og svar

  3. onCreate() af RoomDatabase.Callback() blev ikke kaldt efter et vellykket kald til .build()

  4. Pivot på flere kolonner ved hjælp af Tablefunc