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
| Parameter | Type | Deskripsi |
|---|---|---|
search | string | Kata kunci pencarian |
field | string | Nama 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"))