Skip to main content

Search Helper

Dokumentasi GORM scope function untuk search query.

Function

func Search(search, field string) func(db *gorm.DB) *gorm.DB

Description

Search adalah GORM scope function yang menambahkan kondisi LIKE query untuk pencarian data berdasarkan field tertentu.

Parameters

ParameterTypeDeskripsi
searchstringKata kunci pencarian
fieldstringNama kolom database untuk search

Return

Returns GORM scope function yang dapat digunakan dengan method Scopes().

Implementation

func Search(search, field string) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
if search != "" {
db = db.Where(field+" LIKE ?", "%"+search+"%")
}
return db
}
}

Usage

Basic Usage

var users []models.User
db.Scopes(helpers.Search(searchKeyword, "nama")).Find(&users)

Combined with Other Scopes

var users []models.User
db.Scopes(
helpers.Search(searchKeyword, "nama"),
Pagination(page, perPage),
).Find(&users)

In Repository

func GetUsers(search string, page, perPage int) ([]models.User, error) {
var users []models.User

err := database.DB.
Scopes(helpers.Search(search, "nama")).
Offset((page - 1) * perPage).
Limit(perPage).
Find(&users).Error

return users, err
}

SQL Generated

-- Dengan search = "John"
SELECT * FROM users WHERE nama LIKE '%John%'

-- Tanpa search (kosong)
SELECT * FROM users

Notes

warning

Fungsi ini saat ini hanya mendukung single field search. Untuk multi-field search, perlu implementasi tambahan.

Future Improvements

Untuk mendukung multiple fields:

func SearchMultiple(search string, fields ...string) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
if search != "" {
query := db
for i, field := range fields {
if i == 0 {
query = query.Where(field+" LIKE ?", "%"+search+"%")
} else {
query = query.Or(field+" LIKE ?", "%"+search+"%")
}
}
return query
}
return db
}
}

// Usage
db.Scopes(helpers.SearchMultiple(keyword, "nama", "email", "no_pegawai"))