go 语言分页,链式查询

前端请求:

{current: 1, size: 10, total: 0, resourceType: "lovePhoto", classify: "旅游"}

后端代码:

func ListResourcePath(c *gin.Context) {
	

	// 定义结构体 接受前端传递的数据分页,查询
	type RequestParams struct {
		Current      int    `json:"current"` // 当前页码
		Size         int    `json:"size"`    // 每页大小
		ResourceType string `json:"resourceType"`
		Classify     string `json:"classify"` // 分类名称
	}

	// 初始化请求参数变量并绑定请求体
	var requestParams RequestParams
	if err := c.ShouldBindJSON(&requestParams); err != nil {
		response.FailWithMessage("绑定数据失败", c)
		return
	}

	// 计算Offset值
	offset := (requestParams.Current - 1) * requestParams.Size

	var homes []system.SysHome
	// 使用关联查询  链式操作
	db := global.GVA_DB.Preload("HomeImgs")
	if requestParams.Classify != "" {
		db = db.Where("name = ?", requestParams.Classify) // 添加分类查询条件
	}
    //offset  limit 分页查询
	if err := db.Offset(offset).Limit(requestParams.Size).Find(&homes).Error; err != nil {
		response.FailWithMessage("查询数据失败", c)
		return
	}

	// 转换结果为前端需要的格式
	var results []map[string]interface{}
	for _, home := range homes {
		for _, img := range home.HomeImgs {
			result := map[string]interface{}{
				"ID":           img.ID,
				"Title":        img.Title,
				"Classify":     home.Name, // 从 SysHome 获取分类名称
				"Cover":        img.Cover,
				"Introduction": img.Introduction,
				// 格式化时间
				"CreateTime": img.CreatedAt.Format("2006-01-02 15:04:05"),
			}
			results = append(results, result)
		}
	}
	// 计算总记录数,用于分页
	var totalHomes int64
	if err := global.GVA_DB.Model(&system.SysHome{}).Where("name = ?", requestParams.Classify).Count(&totalHomes).Error; err != nil {
		response.FailWithMessage("查询总数失败", c)
		return
	}
	// 创建包含results的响应数据结构
	var responseData = map[string]interface{}{
		"records":           results,
		"total":             int(totalHomes), // 总记录数
		"size":              requestParams.Size,
		"current":           requestParams.Current,
		"currentTimeMillis": time.Now().UnixNano() / int64(time.Millisecond), // 当前时间的时间戳
	}

	// 返回包含"data"层的响应数据
	response.OkWithDetailed(responseData, "获取数据成功", c)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值