Database
 sql >> база данни >  >> RDS >> Database

Използване на множество полета за уникален ключ в Prisma

Попаднах на проблем с Prisma, който ме накара да изгубя малко време, така че ще напиша как го разреших.

Моделът нямаше id поле, отбелязано като @id така че добавих @@unique() да кажете user и tweet , заедно, дефинираха unique ограничавам.

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

Това означава, че не можем да имаме повече от 1 същия запис на (user, tweet) записи.

Когато се опитах да изтрия запис с

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

Попадам на съобщение за грешка:

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
}

Това, което трябваше да направя, беше да променя

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

до

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

С други думи, комбиниране на уникалните полета, като ги обединява с долно черта.

В ретроспекция съобщението за грешка обясняваше това, но не го разбрах.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AWS Summits 2018:Резюме на Чикаго

  2. Какво представляват тригерите в SQL и как да ги приложим?

  3. Как стартират паралелните планове – част 5

  4. Какви са стъпките в дизайна на база данни?

  5. Подобряване на най-горното/горе низходящо средно решение