1.工具函数
func Paging(model interface{}, sql *gorm.DB, page int, limit int) (map[string]interface{}, error) {
var total int64
if err := sql.Count(&total).Error; err != nil {
return nil, err
}
if page == 0 {
sql.Find(&model)
res := map[string]interface{}{
"total": total,
"list": model,
}
return res, nil
}
if err := sql.Limit(limit).Offset((page - 1) * limit).Find(&model).Error; err != nil {
return nil, err
}
res := map[string]interface{}{
"total": total,
"list": model,
}
return res, nil
}
2结构体与使用方法
func GetCategory(c *gin.Context) {
req := productModel.GetCategoryReq{}
if err := c.ShouldBindJSON(&req); err != nil {
utils.FailWithData(c, err)
return
}
var categories []productModel.SecondCategory
sql := core.DB.Model(&categories).Order("sort")
if req.ID != 0 {
sql = sql.Where("id = ?", req.ID)
}
if req.Name != "" {
sql = sql.Where("name LIKE ?", "%"+req.Name+"%")
}
if req.State {
sql = sql.Where("state = ?", req.State)
}
res, err := utils.Paging(categories, sql, req.Page, req.Limit)
if err != nil {
utils.FailWithData(c, err)
return
}
utils.OkWithData(c, res)
}
type GetCategoryReq struct {
Pagination
SecondCategory
}
type Pagination struct {
Page int `json:"page"`
Limit int `json:"limit"`
}
这里Paging函数的参数可以优化
初学笔记