Hello community, How to implement a relationship f...
# orm-help
m
Hello community, How to implement a relationship for multiple fields that refer to the same table? I tried to search it in the docs, but didn’t find the specific example that I need. Can you point me to the right direction?
Copy code
model User {
  id         String      @default(cuid()) @id
  email      String      @unique
  password   String
  chats      Chat[]
  messages   Message[]
}

model Chat {
  id        String    @default(cuid()) @id
  sender    User      @relation(fields: [senderId], references: [id]) 
  senderId  String.   // <====== is point to User
  receiver   User      @relation("ChatToUser", fields: [receiverId], references: [id])
  receiverId String.   // <====== is point to User
  messages  Message[]
}

model Message {
  id        String    @default(cuid()) @id
  chat      Chat      @relation(fields: [chatId], references: [id])
  chatId    String.    
  sender    User      @relation(fields: [senderId], references: [id])
  senderId  String.    // <====== is point to User
  receiver   User      @relation("MessageToUser", fields: [receiverId], references: [id])
  receiverId String.   // <====== is point to User
}
r
Hey @Munkhtegsh Munkhbat 👋 This should work:
Copy code
model User {
  id               String    @default(cuid()) @id
  email            String    @unique
  password         String
  sentChats        Chat[]    @relation("ChatsSent")
  receivedChats    Chat[]    @relation("ChatsReceived")
  messagesSent     Message[] @relation("MessageSender")
  messagesReceived Message[] @relation("MessageReceiver")
}

model Chat {
  id         String    @default(cuid()) @id
  sender     User      @relation("ChatsSent", fields: [senderId], references: [id])
  senderId   String
  receiver   User      @relation("ChatsReceived", fields: [receiverId], references: [id])
  receiverId String
  messages   Message[]
}

model Message {
  id         String @default(cuid()) @id
  chat       Chat   @relation(fields: [chatId], references: [id])
  chatId     String
  sender     User   @relation("MessageSender", fields: [senderId], references: [id])
  senderId   String
  receiver   User   @relation("MessageReceiver", fields: [receiverId], references: [id])
  receiverId String
}
For every relation, a unique name should be provided so that Prisma can distinguish the relations.
🙌 1
m
Hello @Ryan. Appreciated for taking your time to look at my code. It was super helpful. Have a great weekend!