package query import ( "gorm.io/gorm" ) type ClientFilter struct { Name string `form:"name"` PIC string `form:"pic"` Phone string `form:"phone"` Email string `form:"email"` Address string `form:"address"` MenuID string `form:"menu_id"` // tambahkan field ini MenuName string `form:"menu_name"` // tambahkan field ini PerPage int `form:"per_page"` Page int `form:"page"` GetAll bool `form:"get_all"` } func ApplyClientFilters(db *gorm.DB, filter ClientFilter) *gorm.DB { if filter.Name != "" { db = db.Where("name ILIKE ?", "%"+filter.Name+"%") } if filter.PIC != "" { db = db.Where("pic ILIKE ?", "%"+filter.PIC+"%") } if filter.Phone != "" { db = db.Where("phone ILIKE ?", "%"+filter.Phone+"%") } if filter.Email != "" { db = db.Where("email ILIKE ?", "%"+filter.Email+"%") } if filter.Address != "" { db = db.Where("address ILIKE ?", "%"+filter.Address+"%") } if filter.MenuName != "" { db = db.Joins("JOIN m_menu_clients ON m_menu_clients.client_id = m_clients.id"). Joins("JOIN m_menus ON m_menus.id = m_menu_clients.menu_id"). Where("m_menus.name ILIKE ?", "%"+filter.MenuName+"%") } if filter.MenuID != "" { db = db.Joins("JOIN m_menu_clients ON m_menu_clients.client_id = m_clients.id"). Where("m_menu_clients.menu_id = ?", filter.MenuID) } return db }