Keajaiban Toko Kelontong NamiyaKetika tiga pemuda berandal bersembunyi di toko kelontong tak berpenghuni setelah melakukan pencurian, sepucuk surat misterius mendadak diselipkan ke dalam toko melalui lubang surat. Surat yang berisi permintaan saran. Buy |
Gorm merupakan ORM yang dikembangkan untuk bahasa GO, seperti halnya SQLAlchemy pada bahasa python. Golang juga mendukung proses auto migrations, ini adalah alat bantu yang cukup keren yang berfungsi sebagai alat bantu untuk mempercepat kerja developer.
Berikut ini beberapa kelebihan GORM
Go tidak memiliki class yang ada di bahasa-bahasa strict OOP lain. Tapi Go memiliki tipe data struktur yang disebut dengan Struct.
Struct adalah kumpulan definisi variabel (atau property) dan atau fungsi (atau method), yang dibungkus sebagai tipe data baru dengan nama tertentu. Property dalam struct, tipe datanya bisa bervariasi. Mirip seperti map, hanya saja key-nya sudah didefinisikan di awal, dan tipe data tiap itemnya bisa berbeda.
Dari sebuah struct, kita bisa buat variabel baru, yang memiliki atribut sesuai skema struct tersebut. Biasanya variabel tersebut dipanggil dengan istilah object atau object struct.
Pada tutorial kali ini kita akan membahas tentang relasi One-to-Many SQL pada bahasa Go dengan alat bantu Gorm. Sebelum mengikuti step berikutnya buat terlebih dahulu table artikel dan komentar.
CREATE TABLE public.artikel (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
title varchar(150) NOT NULL,
kontent text NOT NULL,
created_at timestamp NOT NULL,
updated_at timestamptz NULL,
deleted_at timestamp NULL,
);CREATE TABLE public.komentar (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
artikel_id uuid NOT NULL,
komentar text NOT NULL,
created_at timestamp NOT NULL,
updated_at timestamptz NULL,
deleted_at timestamp NULL
);
dari dua table diatas kita buat terlebih dahulu struct, dan simpan kedalam file models.go
type Artikel struct {
ID uuid.UUID `gorm:"column:id" json:"artikel_id"`
Title string `gorm:"column:title" json:"title"`
Kontent string `gorm:"column:kontent" json:"kontent"`
CreatedAt time.Time `gorm:"column:created_at" json:"-"`
UpdatedAt time.Time `gorm:"column:updated_at" json:"-"`
DeletedAt *time.Time `gorm:"column:deleted_at" json:"-"`
}type Komentar struct {
ID uuid.UUID `gorm:"column:id" json:"komentar_id"`
Artikel_ID string `gorm:"column:artikel_id" json:"artikel_id"`
Komentar string `gorm:"column:komentar" json:"komentar"`
CreatedAt time.Time `gorm:"column:created_at" json:"-"`
UpdatedAt time.Time `gorm:"column:updated_at" json:"-"`
DeletedAt *time.Time `gorm:"column:deleted_at" json:"-"`
}
Dari dua struct diatas kita telah membuat variable-variable untuk mendefinisikan field dari table artikel dan komentar. Selanjutnya untuk melakukan join table artikel dan komentar perhatikan kode dibawah ini :
type Artikel struct {
ID uuid.UUID `gorm:"column:id" json:"artikel_id"`
Title string `gorm:"column:title" json:"title"`
Kontent string `gorm:"column:kontent" json:"kontent"`
Komentar []Komentar `gorm:"Foreignkey:Artikel_ID;association_foreignkey:ID;" json:"komentar"`
CreatedAt time.Time `gorm:"column:created_at" json:"-"`
UpdatedAt time.Time `gorm:"column:updated_at" json:"-"`
DeletedAt *time.Time `gorm:"column:deleted_at" json:"-"`
}type Komentar struct {
ID uuid.UUID `gorm:"column:id" json:"komentar_id"`
Artikel_ID string `gorm:"column:artikel_id" json:"artikel_id"`
Komentar string `gorm:"column:komentar" json:"komentar"`
CreatedAt time.Time `gorm:"column:created_at" json:"-"`
UpdatedAt time.Time `gorm:"column:updated_at" json:"-"`
DeletedAt *time.Time `gorm:"column:deleted_at" json:"-"`
}
Perhatikan kode diatas, untuk melakukan relational table tambahkan kode berikut ini :
Komentar []Komentar `gorm:"Foreignkey:Artikel_ID;association_foreignkey:ID;" json:"komentar"`
var artikel models.ArtikelConn.Preload("Komentar").Find(&artikle)
{
"artikel_id":"0909sdf9090-sdfd990-sdfsfs-000",
"title":"sample tutorial",
"kontent":"belajar golang",
"komentar": [
{
"komentar_id":"998989-sdfd999090-000-000",
"artikel_id":"0909sdf9090-sdfd990-sdfsfs-000",
"komentar":"jadi ingin ikut belajar, hehee"
}
]
}