Membuat relasi dengan gorm di Gofiber
Baik, mari kita lanjutkan dengan membuat model, migration, dan API CRUD untuk tabel category dengan relasi one-to-many dengan tabel product. Berikut adalah langkah-langkahnya:
1. Buat Migration untuk Tabel Category
Pertama, kita perlu membuat migration untuk tabel category dengan menambahkan foreign key ke tabel product.
helpers/migration.go
package helpers
import (
"gofiber/src/configs"
"gofiber/src/models"
)
func Migration() {
configs.DB.AutoMigrate(&models.Product{}, &models.Category{})
}models/Category.go
package models
import (
"gofiber/src/configs"
"gorm.io/gorm"
)
type Category struct {
gorm.Model
Name string `json:"name"`
Image string `json:"image"`
Products []ApiProduct `json:"products"`
}
type ApiProduct struct {
Name string `json:"name" `
Price float64 `json:"price" `
Stock int `json:"stock" `
CategoryID uint `json:"category_id"`
}
func SelectAllCategories() []*Category {
var categories []*Category
configs.DB.Preload("Products", func(db *gorm.DB) *gorm.DB {
var items []*ApiProduct
return db.Model(&Product{}).Find(&items)
}).Find(&categories)
return categories
}
func SelectCategoryById(id int) *Category {
var category Category
configs.DB.Preload("Products",
func(db *gorm.DB) *gorm.DB {
var items []*ApiProduct
return db.Model(&Product{}).Find(&items)
}).First(&category, "id = ?", id)
return &category
}
func PostCategory(category *Category) error {
result := configs.DB.Create(&category)
return result.Error
}
func UpdateCategory(id int, updatedCategory *Category) error {
result := configs.DB.Model(&Category{}).Where("id = ?", id).Updates(updatedCategory)
return result.Error
}
func DeleteCategory(id int) error {
result := configs.DB.Delete(&Category{}, "id = ?", id)
return result.Error
}Dalam implementasi di atas, kita menggunakan Preload("Products") untuk memuat produk yang terkait dengan setiap kategori yang dipilih. Ini memastikan bahwa ketika Anda mengambil semua kategori atau kategori berdasarkan ID, produk-produk yang terkait juga dimuat ke dalam struktur data kategori.
models/Product.go
2. Buat API CRUD untuk Category
Kemudian, mari buat API CRUD untuk mengelola data kategori.
controllers/CategoryController.go
routes/main.go
Tambahkan rute baru untuk API CRUD kategori.
Dengan langkah-langkah ini, Anda telah menambahkan model, migration, dan API CRUD untuk kategori dengan relasi one-to-many dengan produk. Anda juga telah mengintegrasikan API kategori dengan rute aplikasi Anda.
sumber : Dokumentasi
Last updated