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.
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.
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.
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.
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.
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
}