go-gf框架查询结果数组里套数组 数据和方法

数据

type ObtainClassificationRes struct {
	Id        int          `json:"id" dc:"用户名"`
	Name      string       `json:"name" dc:"标题"`
	Introduce string       `json:"introduce" dc:"介绍"`
	Picture   string       `json:"picture" dc:"图片"`
	Vip       int          `json:"vip" dc:"vip:0普通1vip"`
	LabelData []*LabelItem `json:"label_data" dc:"标签结构体"`
	// Add more fields if necessary
}

type LabelItem struct {
	Id        int    `json:"id" dc:"用户名"`
	SortId    int    `json:"sort_id" dc:"分类id"`
	Vip       int    `json:"vip" dc:"vip:0普通1vip"`
	Name      string `json:"name" dc:"标题"`
	Introduce string `json:"introduce" dc:"介绍"`
	Picture   string `json:"picture" dc:"图片"`
	// Add more fields if necessary
}

方法

func (s *sAppuserContent) ObtainClassification(ctx context.Context, req *appuser.ObtainClassificationReq) (res *appuser.ObtainClassificationRes, err error) {
	err = g.Try(ctx, func(ctx context.Context) {
		appAiSortList, err := systemdao.AppAiSort.Ctx(ctx).WithAll().All()
		if err != nil {
			// 错误处理
			err = fmt.Errorf("获取分类数据失败: %v", err)
			return
		}

		// 定义结果列表
		resultList := make([]*model.ObtainClassificationRes, len(appAiSortList))

		for i, appAiSort := range appAiSortList {
			fmt.Printf("appAiSort", appAiSort)
			fmt.Printf("ortID", appAiSort["id"].Int())
			// 查询每个分类下的标签数据
			appAiLabelList, err := systemdao.AppAiLabel.Ctx(ctx).WithAll().Where(systemdao.AppAiLabel.Columns().SortId, appAiSort["id"].Int()).All()
			if err != nil {
				// 错误处理
				err = fmt.Errorf("获取分类下的标签数据失败: %v", err)
				return
			}

			// 构建 LabelData 数组
			labelData := make([]*model.LabelItem, len(appAiLabelList))
			for j, appAiLabel := range appAiLabelList {
				// 将查询到的标签数据转换为 LabelItem 结构体
				labelData[j] = &model.LabelItem{
					Id:        appAiLabel["id"].Int(),
					SortId:    appAiLabel["sort_id"].Int(),
					Vip:       appAiLabel["vip"].Int(),
					Name:      appAiLabel["name"].String(),
					Introduce: appAiLabel["introduce"].String(),
					Picture:   appAiLabel["picture"].String(),
				}
			}

			// 构建 ObtainClassificationRes 结构体
			obtainClassificationRes := &model.ObtainClassificationRes{
				Id:        appAiSort["id"].Int(),
				Name:      appAiSort["name"].String(),
				Introduce: appAiSort["introduce"].String(),
				Picture:   appAiSort["picture"].String(),
				Vip:       appAiSort["vip"].Int(),
				LabelData: labelData,
				// Add more fields if necessary
			}

			// 将 obtainClassificationRes 添加到结果列表中
			resultList[i] = obtainClassificationRes
		}

		res = &appuser.ObtainClassificationRes{
			List: resultList,
			// Add more fields if necessary
		}
	})
	return
}

api

// ObtainClassificationReq 获取首页分类标签信息请求参数
type ObtainClassificationReq struct {
	g.Meta `path:"/ObtainClassification" tags:"客户端ai分类模块" method:"post" summary:" 获取首页分类标签信息"`
	commonApi.Author
}

// ObtainClassificationRes 获取首页分类标签信息返回结果
type ObtainClassificationRes struct {
	g.Meta `mime:"application/json"`
	commonApi.ListRes
	List []*model.ObtainClassificationRes `json:"list"`
}

controller

// 获取首页分类标签信息
func (c *appuserGenController) ObtainClassification(ctx context.Context, req *appuser.ObtainClassificationReq) (res *appuser.ObtainClassificationRes, err error) {
	res, err = service.AppuserContent().ObtainClassification(ctx, req)
	return

}

解释

  1. 获取分类数据:

    • 通过执行 SQL 查询语句 SELECT * FROM app_ai_sort ORDER BY priority DESC 从数据库中获取分类数据。
    • 使用 g.DB().Query(ctx, sql) 函数执行查询,并将结果保存在 appAiSortList 变量中。
    • 如果查询过程中出现错误,将错误信息保存在 err 变量中,并提前返回。
  2. 构建结果列表:

    • 使用 make([]*model.ObtainClassificationRes, len(appAiSortList)) 创建一个长度为 appAiSortList 的切片,用于存储结果列表。
    • 结果列表中的每个元素都是类型为 model.ObtainClassificationRes 的指针。
  3. 遍历分类数据并获取每个分类下的标签数据:

    • 使用 for i, appAiSort := range appAiSortList 循环遍历分类数据列表。
    • 在每次循环中,通过执行 SQL 查询语句 SELECT * FROM app_ai_label WHERE sort_id = %d ORDER BY priority DESC 获取与当前分类关联的标签数据,其中 %d 会被当前分类的 ID 替代。
    • 使用 g.DB().Query(ctx, sql) 函数执行查询,并将结果保存在 appAiLabelList 变量中。
    • 如果查询过程中出现错误,将错误信息保存在 err 变量中,并提前返回。
  4. 构建标签数据数组:

    • 使用 make([]*model.LabelItem, len(appAiLabelList)) 创建一个长度为 appAiLabelList 的切片,用于存储标签数据数组。
    • 标签数据数组中的每个元素都是类型为 model.LabelItem 的指针。
  5. 转换标签数据为结构体:

    • 使用 for j, appAiLabel := range appAiLabelList 循环遍历标签数据列表。
    • 在每次循环中,将查询到的标签数据转换为 model.LabelItem 结构体的实例,并将其赋值给标签数据数组的对应元素。
    • 转换过程中,将数据库查询结果中的字段值赋值给 model.LabelItem 结构体中相应的字段。
  6. 构建 ObtainClassificationRes 结构体:

    • 使用查询到的分类数据和标签数据构建 ObtainClassificationRes 结构体的实例。
    • 在构建过程中,将分类数据中的字段值赋值给 ObtainClassificationRes 结构体中相应的字段,同时将标签数据数组赋值给 LabelData 字段。
  7. ObtainClassificationRes 添加到结果列表中:

    • 将构建好的 ObtainClassificationRes 实例添加到结果列表的对应位置。
  8. 构建响应对象:

    • 使用 &appuser.ObtainClassificationRes{List: resultList} 创建一个 appuser.ObtainClassificationRes 的实例,并将结果列表赋值给 List 字段。
  9. 返回结果:

    • 将构建好的响应对象 res 和可能发生的错误 err 返回给调用方。

整个代码的目的是获取分类数据和对应的标签数据,并将它们组装成一个结构化的响应对象,以便返回给调用方。具体步骤包括查询分类数据和标签数据,将它们转换为相应的结构体,并将它们组合成一个包含结果列表的响应对象。这样做可以提供给调用方一个完整的分类数据和标签数据的信息,以便进一步处理和使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡忘_cx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值