首先复制前面的build sql。因为不同的数据库可能字段不一样,而我们需要筛选的是当前数据库当前条件下的金额汇总就行了。
其次再最外层加上调用这个方法获得sql的方法,还得修改结构体以便于接收参数。
先修改头sql添加头sql方法
go
govar sumAmountList []wamapping.CurrencySum
sumAmountSQL, sumAmountValues,err := r.BuildSumAmountSQLWithValues(ctx.Context())
if err != nil {
return errors.WithMessage(err, "Failed to build SQL for querying the total order amount by currency in the collection")
}
if err = s.DB.Raw(sumAmountSQL, sumAmountValues...).Scan(&sumAmountList).Error; err != nil {
return errors.WithMessage(err, "search wealth order list failed")
}
err = copier.CopyWithOption(&resp.CurrencySumList, sumAmountList, copier.Option{Converters: []copier.TypeConverter{TimerPoint2StringConverter, String2IntConverter}})
if err != nil {
l.Info("copy database model to resp model failed", zap.String("error", err.Error()))
return code.Response(ctx, code.NewDefaultError(code.ErrBuildResp), nil)
}
gofunc (w WealthOrderDao) SearchAll(ctx context.Context, tx *gorm.DB, sWrapper *dao.OrderSearchWrapper) (tradedb.TWealthOrders, error) {
if tx == nil {
tx = w.DBCtx(ctx)
}
ret := make(tradedb.TWealthOrders, 0, 0)
// 应用 `sWrapper.GormSearch()` 方法提供的 GORM 搜索范围(scopes)
g := tx.WithContext(ctx).Table(tradedb.TWealthOrderTableName).Scopes(sWrapper.GormSearch())
if sWrapper.Sort.Valid {
g = g.Order(sWrapper.Sort.ValueOrZero())
}
return ret, g.Find(&ret).Error
}
这段 Go 代码定义了一个名为 SearchList 的方法,该方法是 WealthOrderDao 接口的一个实现,主要用于从数据库中搜索并获取财富订单列表。下面逐行解释代码含义:
定义了一个函数,其接收者 w 是实现了 WealthOrderDao 接口的对象,参数包括:
ctx: 上下文对象,通常携带请求相关的元数据及取消信号。tx: 可选的数据库事务对象,默认为 nil。若传入则使用传入的事务进行数据库操作,否则使用 w.DBCtx(ctx) 创建或获取数据库连接。判断是否提供了数据库事务 tx,如果没有提供,则基于 ctx 上下文获取数据库连接。
初始化一个空的 tradedb.TWealthOrders 类型切片,它应该是预定义的一种用于存储财富订单数据的结构体切片。
使用 WithContext 方法将 ctx 上下文传递给数据库连接,接着设置查询表名为 tradedb.TWealthOrderTableName 并应用 sWrapper.GormSearch() 方法提供的 GORM 搜索范围(scopes)。
根据 sWrapper.Start 设置查询的偏移量(offset),用于分页查询时跳过前几条记录。
根据 sWrapper.Count 设置查询的数量限制(limit),用于控制单次查询返回的记录数量。
检查排序字段 sWrapper.Sort 是否有效,如果有效,则按照其值(sWrapper.Sort.ValueOrZero())对查询结果进行排序。
最后,执行数据库查询操作,将查询结果填充到之前初始化的空切片 ret 中,并返回填充后的切片以及查询过程中的任何错误。
综上所述,这段代码实现了一个利用 GORM 库针对财富订单表进行条件筛选、排序和分页查询的方法,并返回符合查询条件的财富订单列表及可能发生的错误。
本文作者:JIeJaitt
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!