Database
 sql >> Baza danych >  >> RDS >> Database

Używanie wielu pól dla unikalnego klucza w Prisma

Natknąłem się na problem z Prismą, który sprawił, że straciłem trochę czasu, więc napiszę, jak go rozwiązałem.

Model nie miał id pole oznaczone jako @id więc dodałem @@unique() powiedzieć user i tweet razem zdefiniowali unique ograniczać.

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

Oznacza to, że nie możemy mieć więcej niż 1 takich samych wpisów (user, tweet) wpisy.

Kiedy próbowałem usunąć wpis za pomocą

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

Pojawia się komunikat o błędzie:

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
}

To, co musiałem zrobić, to zmienić

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

do

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

Innymi słowy, łącząc unikalne pola, łącząc je z podkreśleniem.

Z perspektywy czasu komunikat o błędzie trochę to wyjaśniał, ale nie zrozumiałem.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Model relacyjny

  2. Kopia zapasowa / eksport bazy danych z SSH

  3. Zmienna środowiskowa LD_DEBUG

  4. Podstawy wyrażeń tabelarycznych, Część 7 – CTE, względy optymalizacyjne

  5. SQL GROUP BY – 3 proste wskazówki, jak grupować wyniki jak profesjonalista