GORM 如何读取别名字段的值

查询数据时给字段设置别名,请问使用 GORM 如何把别名字段的值读取到结构体中?

表结构

DROP TABLE IF EXISTS "test"."test";
CREATE TABLE "test"."test" (
  "id" varchar(32) NOT NULL,
  "name" varchar(255) COLLATE "pg_catalog"."default",
  "remark" varchar(255) COLLATE "pg_catalog"."default"
);
ALTER TABLE "test"."test" ADD CONSTRAINT "test_pkey" PRIMARY KEY ("id");

表对应模型结构体

type Test struct {
    ID     string  `gorm:"column:id;type:varchar(32);primaryKey;comment:唯一 ID,流水号" json:"id"` // 唯一 ID,流水号
    Name   string `gorm:"column:name;type:varchar(255);comment:名称" json:"name"` // 名称
    Remark string  `gorm:"column:remark;type:varchar(255);comment:备注" json:"remark"` // 备注

    MoreInfo string `gorm:"-" json:"moreInfo"` // 更多信息,非表结构字段
}

GORM 查询

gormDB 为已初始化的 gorm 数据库连接。

test := Test{ID: "0000000001"}
gormDB.Select("*, 'testMoreInfoVal' AS more_Info").Where(&test).Find(&test)

问:如何用 GORM 将表结构中不存在的别名字段 more_Info 读取到 Test 结构体的 MoreInfo 属性中?

本作品采用《CC 协议》,转载必须注明作者和本文链接
Tiki
讨论数量: 2

返回Json的时候自动转成键的别名,在运算中还是你自己定义的大驼峰键。

// ThatGUser 某用户

func ThatGUser(ctx *gin.Context) {

// 预定义参数
var state int
var msg string

userId := Kit.Input(ctx, "user_id")

// 数据库表的字段(输出结果)
type ResKeys struct {
    UserId int `json:"user_id"`
    Nickname string `json:"nickname"`
    UserClassId string `json:"user_class_id"`
    CreateTime string `json:"create_time"`
    UpdateTime string `json:"update_time"`
}

// 多查询条件
WhereMap := map[string]interface{}{}
WhereMap["state"] = 1
WhereMap["user_id"] = userId

// 操作数据库
res := ResKeys{}
Kit.DB.Table("gl_user").Where(WhereMap).Find(&res)

if res.UserId == 0 {
    state = 0
    msg = "查询无数据"
}else {
    state = 1
    msg = "查询完成"
}

// 访问结构体并改变成员变量的值
createTime := res.CreateTime
createTime = Common.DateToDate(createTime)
res.CreateTime = createTime

// 返回一些测试数据
testData := map[string]interface{}{
    "user_id": userId,
    "WhereMap": WhereMap,
}

// 返回特殊格式意义的数据
ctx.JSONP(200, map[string]interface{}{
    "state":     state,
    "msg":       msg,
    "test_data": testData,
    "content":   res,
})

}

2年前 评论

@fyonecon 感谢您的解答。不过我在 stackoverflow 找到了更好的答案,谢谢。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!