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