PrismaP
Prisma2y ago
Nick

@relation field referencing a compound id

Is there a way to have an @relation that points to a compound id on another table?

Consider this scenario:
https://www.prisma.io/docs/orm/prisma-client/special-fields-and-types/working-with-composite-ids-and-constraints

model User {
  id    Int    @id @default(autoincrement())
  name  String
  post  Post[]
  likes Like[]
}

model Post {
  id      Int    @id @default(autoincrement())
  content String
  User    User?  @relation(fields: [userId], references: [id])
  userId  Int?
  likes   Like[]
}

model Like {
  postId Int
  userId Int
  User   User @relation(fields: [userId], references: [id])
  Post   Post @relation(fields: [postId], references: [id])

  @@id([postId, userId])
}


Say we wanted to add a 4th table that looks like this:
model Review {
  id        String       @id @default(uuid())
  status    ReviewStatus @default(PENDING)

  // Reference to user table
  userId    String?
  reviewedBy User?          @relation(fields: [userId], references: [id])

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  
  // Reference to post table
  postId Int? @unique
  post   Post? @relation(fields: [postId], references: [id], onDelete: Cascade)
  
  // Reference to like table
  likeId Int? @unique
  like   Like? @relation(fields: [likeId], references: [postId, userId], onDelete: Cascade)
}


I cannot figure out how to set up like Like? @relation(fields: [likeId], references: [postId, userId], onDelete: Cascade) since the primary key on the Like table is an implicit compound id. I cannot map two foreign columns to one column either.

Any ideas?
How to read, write, and filter by compound IDs and unique constraints.
Working with compound IDs and unique constraints (Concepts) | Prism...
Was this page helpful?