You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GORM查询积分前100用户并返回包含其已购课程数组的JSON结果

解决方案

步骤1:调整Users模型添加关联关系

先在原有Users模型中新增和UserCourse的关联字段,GORM会自动根据外键规则匹配用户对应的已购课程:

import "gorm.io/gorm"
import "time"

type Users struct {
    // 如果你不需要gorm.Model自带的CreatedAt/UpdatedAt/DeletedAt字段,可以直接删除gorm.Model,避免序列化时返回多余字段
    gorm.Model
    ID          uint   `gorm:"autoIncrement;unique" json:"id"`
    // 如果要匹配输出要求的驼峰格式phoneNumber,把json标签改成json:"phoneNumber"即可
    PhoneNumber string `gorm:"primaryKey" json:"phone_number"`
    Name        string `gorm:"default:dear user" json:"name"`
    Rank        uint   `json:"rank"`
    Score       uint   `json:"score"`
    Image       string `json:"image"`
    Email       string `json:"email"`
    Address     string `json:"address"`
    Birthday    string `json:"birthday"`
    Biography   string `json:"biography"`
    // 新增关联字段,关联用户已购课程
    Courses []UserCourse `gorm:"foreignKey:UserPhoneNumber;references:PhoneNumber" json:"courses"`
}

type UserCourse struct {
    CourseID        uint   `gorm:"primaryKey" json:"course_id"`
    UserPhoneNumber string `gorm:"primaryKey" json:"user_phone_number"`
    Progress        uint   `json:"progress"`
    CreatedAt       time.Time `json:"created_at"`
    UpdatedAt       time.Time `json:"updated_at"`
}

步骤2:使用预加载查询数据

调用GORM的Preload方法即可在查询用户的同时自动拉取关联的课程数据:

// 定义接收查询结果的变量
var users []Users
// 预加载关联课程,同时查询排名前100的用户
err := database.myDatabase.Preload("Courses").Order("rank asc").Limit(100).Find(&users).Error
if err != nil {
    // 自行处理查询错误逻辑
    panic(err)
}

步骤3:封装输出结构

按照你要求的JSON格式封装外层结构即可:

// 定义外层返回结构
type Response struct {
    Users []Users `json:"users"`
}

// 封装查询到的数据
res := Response{
    Users: users,
}

// 直接序列化res变量即可得到目标格式的JSON

补充说明

  • 如果需要UserCourse的时间字段输出2021-01-01格式,你可以给CreatedAt/UpdatedAt字段自定义JSON序列化方法,或者直接把字段类型改成string存储
  • 数据量极大的场景下可以用Joins关联查询代替Preload减少SQL查询次数,普通业务场景Preload的写法足够简洁易用

内容的提问来源于stack exchange,提问作者Mohammad Derakhshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:54:01