sql >> Databáze >  >> RDS >> Database

Použití více polí pro jedinečný klíč v Prisma

Narazil jsem na problém s Prismou, kvůli kterému jsem ztratil trochu času, takže napíšu, jak jsem to vyřešil.

Model neměl id pole označené jako @id tak jsem přidal @@unique() říct user a tweet , společně definovali unique omezit.

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

To znamená, že nemůžeme mít více než 1 stejný záznam (user, tweet) záznamy.

Když jsem se pokusil smazat záznam pomocí

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

Objeví se chybová zpráva:

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
}

Co jsem musel udělat, bylo změnit

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

do

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

Jinými slovy, kombinování jedinečných polí, která je zřetězují, s podtržítkem.

Při zpětném pohledu to chybová zpráva tak nějak vysvětlovala, ale nepochopil jsem to.


  1. Co přesně znamená znaková sada a řazení?

  2. C# s parametry INSERT MySQL

  3. Oracle DB Server + APEX + ORDS + JasperReports od nuly (část 1)

  4. Oracle PL/SQL:Příklad DBMS_SCHEDULER.CREATE_JOB