Prisma ORM
Relation

Prisma ORM Relationship

Di dalam prisma ORM, kita bisa membuat relasi antar table dengan mudah. Kita bisa membuat relasi antar table dengan menggunakan @relation decorator.

Relationship adalah sebuah hubungan antar table yang saling berhubungan satu sama lain. Di dalam prisma ORM, ada 4 jenis relasi yang bisa kita gunakan, yaitu:

  • One-to-one
  • One-to-many
  • Many-to-one
  • Many-to-many

One-to-one

One-to-one adalah relasi antar table yang memiliki hubungan satu sama lain. Contohnya adalah relasi antara user dan profile. Di mana satu user hanya memiliki satu profile dan satu profile hanya dimiliki oleh satu user.

schema.prisma
model User {
  id        Int         @id @default(autoincrement())
  email     String      @unique
  name      String?
  profile   Profile?
}
 
model Profile {
  id        Int         @id @default(autoincrement())
  bio       String?
  user      User?       @relation(fields: [userId], references: [id])
  userId    Int?
}

Pada contoh di atas, kita membuat relasi antara user dan profile. Di mana satu user hanya memiliki satu profile dan satu profile hanya dimiliki oleh satu user.

One-to-many

One-to-many adalah relasi antar table yang memiliki hubungan satu ke banyak. Contohnya adalah relasi antara user dan post. Di mana satu user bisa memiliki banyak post dan satu post hanya dimiliki oleh satu user.

schema.prisma
 
model User {
  id        Int         @id @default(autoincrement())
  email     String      @unique
  name      String?
  posts     Post[]
}
 
model Post {
  id        Int         @id @default(autoincrement())
  title     String
  content   String?
  user      User        @relation(fields: [userId], references: [id])
  userId    Int
}

Pada contoh di atas, kita membuat relasi antara user dan post. Di mana satu user bisa memiliki banyak post dan satu post hanya dimiliki oleh satu user.

Many-to-one

Many-to-one adalah relasi antar table yang memiliki hubungan banyak ke satu. Contohnya adalah relasi antara post dan user. Di mana satu post hanya dimiliki oleh satu user dan satu user bisa memiliki banyak post.

schema.prisma
 
model User {
  id        Int         @id @default(autoincrement())
  email     String      @unique
  name      String?
  posts     Post[]
}
 
model Post {
  id        Int         @id @default(autoincrement())
  title     String
  content   String?
  user      User        @relation(fields: [userId], references: [id])
  userId    Int
}

Pada contoh di atas, kita membuat relasi antara post dan user. Di mana satu post hanya dimiliki oleh satu user dan satu user bisa memiliki banyak post.

Many-to-many

Many-to-many adalah relasi antar table yang memiliki hubungan banyak ke banyak. Contohnya adalah relasi antara post dan category. Di mana satu post bisa memiliki banyak category dan satu category bisa memiliki banyak post.

schema.prisma
 
model Post {
  id        Int         @id @default(autoincrement())
  title     String
  content   String?
  categories Category[]
}
 
model Category {
  id        Int         @id @default(autoincrement())
  name      String
  posts     Post[]
}

Contoh lain dengan menggunakan tambahan table, seperti User, Products dan Order.

schema.prisma
 
model User {
  id        Int         @id @default(autoincrement())
  email     String      @unique
  name      String?
  orders    Order[]
}
 
model Product {
  id        Int         @id @default(autoincrement())
  name      String
  orders    Order[]
}
 
model Order {
  id        Int         @id @default(autoincrement())
  user      User        @relation(fields: [userId], references: [id])
  product   Product     @relation(fields: [productId], references: [id])
  userId    Int
  productId Int
}