Search code examples
prismaprisma2

prisma2 how to relate one-to-many and many-to-one?


I need some help to understqnd how to set my data modelisation.

What i'm trying to do is :

  • Reference a group ID in User model. A user can only be in one group, this is what i've done below.
  • Reference in Group Model all users that are inside a group. This is what I need help with.
model User {
  id         String   @id @default(uuid())
  email      String   @unique
  role       Role     @default(USER)
  group      Group?   @relation(fields: [group_id], references: [id], onDelete: SetNull) 
  group_id   String   
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt

  @@map("user")
}

model Group {
  id         String   @id @default(uuid())
  name       String
  users      User[]
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
  deleted    Boolean  @default(false)

  @@map("group")
}

How can I make this list of User when I already have users User[] for the relation in User model ?

(BTW i've read the doc but i'm totally lost...)


Solution

  • I think your code is correct, you can use prisma-client to test

    This is an example of this relation

    model Agents {
      id             Int       @id @default(autoincrement()) @db.UnsignedInt
      name           String?   @db.VarChar(255)
      owner          String?   @db.VarChar(255)
      address        String?   @db.Text
      lat            String?   @db.VarChar(10)
      lng            String?   @db.VarChar(10)
      tel            String?   @db.VarChar(13)
      mobile         String?   @db.VarChar(11)
      workTime       String?   @db.VarChar(255)
      province       Provinces @relation(fields: [provinceId], references: [id])
      provinceId     Int       @db.UnsignedInt
      createDateTime DateTime  @default(now()) @db.Timestamp(0)
      updateDateTime DateTime? @db.Timestamp(0)
      @@index([provinceId], name: "provinceId")
      @@map(name: "agents")
    }
    
    
    model Provinces {
      id             Int       @id @default(autoincrement()) @db.UnsignedInt
      name           String?   @db.VarChar(255)
      coords         String?   @db.Text
      createDateTime DateTime  @default(now()) @db.Timestamp(0)
      updateDateTime DateTime? @db.Timestamp(0)
      agents Agents[]
      @@map(name: "provinces")
    }