Pemrograman

02 Deklarasi Model pada GORM: Panduan Lengkap ORM di Golang

Pelajari cara deklarasi model pada GORM, library ORM populer di Golang. Panduan lengkap dengan contoh kode, konversi model, fields level permission, embedded struct, dan fields tags. Cocok untuk pemula yang ingin memahami GORM lebih dalam.

GORM adalah library ORM (Object-Relational Mapping) yang populer dalam ekosistem Golang. Dengan GORM, kita dapat bekerja dengan database secara lebih mudah menggunakan model yang merepresentasikan tabel dalam database.

Dalam artikel ini, kita akan membahas berbagai aspek penting dalam deklarasi model pada GORM, termasuk:

  • Contoh Deklarasi Model
  • Konversi Model
  • Fields Level Permission
  • Embedded Struct
  • Fields Tags

Artikel ini akan memberikan pemahaman yang jelas dan terstruktur, sehingga cocok bagi programmer pemula yang ingin belajar mengelola database dengan GORM.

Contoh Deklarasi Model

Deklarasi model dalam GORM dilakukan dengan membuat struct yang merepresentasikan tabel di dalam database. Berikut adalah contoh deklarasi model sederhana:

package main

import (
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

type User struct {
    ID        uint   `gorm:"primaryKey"`
    Name      string
    Email     string `gorm:"unique"`
    Age       int
}

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    db.AutoMigrate(&User{})
}

Kode di atas akan membuat tabel users dalam database SQLite dengan kolom ID, Name, Email, dan Age.

Konversi Model

GORM memungkinkan konversi model ke bentuk lain seperti JSON atau map untuk keperluan tertentu, misalnya API response:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    user := User{
        ID:    1,
        Name:  "John Doe",
        Email: "john@example.com",
        Age:   30,
    }

    // Konversi ke JSON
    userJSON, _ := json.Marshal(user)
    fmt.Println(string(userJSON))
}

Kode di atas mengonversi struct User ke JSON, yang umum digunakan dalam API berbasis REST.

Konvensi Nama Kolom

GORM secara otomatis menentukan nama kolom berdasarkan konvensi berikut:

  • Nama kolom default akan menggunakan snake_case.
  • Nama tabel default akan menjadi bentuk jamak dari struct, misalnya User akan menjadi users.
  • Foreign key akan ditambahkan dengan format {ModelName}ID, misalnya UserID.
  • Struct field dengan tipe waktu (time.Time) akan otomatis dianggap sebagai created_at dan updated_at jika tidak diubah.

Misalnya, dalam struct berikut:

type Order struct {
    ID        uint
    UserID    uint
    User      User
    CreatedAt time.Time
}

GORM akan membuat tabel orders dengan kolom id, user_id, dan created_at.

Fields Level Permission

Terkadang, kita ingin membatasi akses ke field tertentu, misalnya agar tidak muncul dalam JSON response. Ini bisa dilakukan dengan tag json:"-":

type SecureUser struct {
    ID        uint   `gorm:"primaryKey"`
    Name      string
    Email     string `gorm:"unique" json:"-"`
    Password  string `json:"-"`
}

Dengan tag json:"-", field Email dan Password tidak akan muncul saat dikonversi ke JSON.

Embedded Struct

Embedded struct digunakan untuk menghindari duplikasi kode dengan menyertakan struct lain ke dalam model:

type BaseModel struct {
    ID        uint `gorm:"primaryKey"`
    CreatedAt time.Time
    UpdatedAt time.Time
}

type Product struct {
    BaseModel
    Name  string
    Price float64
}

Dengan cara ini, Product akan memiliki field ID, CreatedAt, dan UpdatedAt dari BaseModel.

Fields Tags

GORM mendukung berbagai field tags untuk konfigurasi database. Beberapa contoh:

type Employee struct {
    ID        uint   `gorm:"primaryKey"`
    Name      string `gorm:"size:100"`
    Salary    float64 `gorm:"default:0.0"`
    IsActive  bool   `gorm:"default:true"`
}
  • size:100 membatasi panjang string menjadi 100 karakter.
  • default:0.0 menetapkan nilai default untuk kolom Salary.
  • default:true membuat nilai IsActive menjadi true secara default.

Kesimpulan

GORM mempermudah pengelolaan database dalam Golang dengan pendekatan berbasis model. Dengan memahami deklarasi model, konversi model, pengaturan permission, embedded struct, dan field tags, kita dapat membangun aplikasi berbasis database dengan lebih efisien.

Jika Anda tertarik untuk belajar lebih dalam tentang Golang, Anda bisa mengunjungi:

comments powered by Disqus