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"))