Go 中 GORM 预加载如何自定义排序和过滤关联数据?
go 中 gorm 自定义预加载的用法
想要通过预加载查询对象关联数据,而自定义预加载的用法需要使用 func(query *gorm.db) *gorm.db {} 这个匿名函数。在这个回调函数里,可以对关联查询的结果进行控制和操作,比如排序、过滤等。
例如,假设需要查询商品列表,并按照商品 id 降序排序:
type LabelType struct { ... GoodsList []Goods `gorm:"ForeignKey:LabelId" json:"goods_list"` //查询当前分类下的商品集合 } type Goods struct { ... Category Category `gorm:"foreignkey:CategoryID" json:"category"` //分类表 } func (labelModel *LabelType) GetAll(params *request.IndexParams) (labelTypes []*LabelType) { err := db.Debug().Model(&labelTypes). Preload("GoodsList", func(query *gorm.DB) *gorm.DB { return query.Order("goods_id desc") }). Preload("GoodsList.Category"). Where("mall_id = ? and status = ?", params.MallId, "normal").Order("weigh desc"). Find(&labelTypes).Error if err != nil && err != gorm.ErrRecordNotFound { return nil } return labelTypes }
在这个预加载回调函数中,query.order("goods_id desc") 表示按照商品 id 降序排序关联查询的结果。
案例中遇到的错误,是因为 go 的 gorm v1 和 v2 版本的不同。这个问题已得到解决,请确保使用正确的版本。
以上就是Go 中 GORM 预加载如何自定义排序和过滤关联数据?的详细内容,更多请关注其它相关文章!