为了账号安全,请及时绑定邮箱和手机立即绑定

GORM 如何读取别名字段的值

GORM 如何读取别名字段的值

Go
拉丁的传说 2022-08-30 21:40:53
查询数据时,将为字段设置别名。如何使用 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:Unique ID" json:"id"`    Name   string `gorm:"column:name;type:varchar(255);comment:Name Info" json:"name"`    Remark string `gorm:"column:remark;type:varchar(255);comment:Remark Info" json:"remark"`    MoreInfo string `gorm:"-" json:"moreInfo"` // Non-table field}GORM 查询gormDB是初始化的 gorm 数据库连接。test := Test{ID: "0000000001"}gormDB.Select("*, 'testMoreInfoVal' AS more_Info").Where(&test).Find(&test)问:如何使用 GORM 将表中不存在的别名字段读取到结构的属性中?more_InfoMoreInfoTest
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

如果设置了表结构并且您没有使用AutoMigrate,那么只需更改标签以使MoreInfo成为只读字段并确保使用别名来匹配Gorm执行DB -> Go命名转换的方式即可解决此问题。more_info


type Test struct {

    ID     string `gorm:"column:id;type:varchar(32);primaryKey;comment:Unique ID" json:"id"`

    Name   string `gorm:"column:name;type:varchar(255);comment:Name Info" json:"name"`

    Remark string `gorm:"column:remark;type:varchar(255);comment:Remark Info" json:"remark"`


    MoreInfo string `gorm:"->" json:"moreInfo"` // Non-table field


}


gormDB.Select("*, 'testMoreInfoVal' AS more_info").Where(&test).Find(&test)

如果您使用的是自动迁移,那么问题将在表中创建一个列,尽管 Gorm 在使用结构时会阻止写入该列。more_info


在这种情况下,您可以做的是使用一个新的结构来嵌入测试结构,如下所示:


type Test struct {

    ID     string `gorm:"column:id;type:varchar(32);primaryKey;comment:Unique ID" json:"id"`

    Name   string `gorm:"column:name;type:varchar(255);comment:Name Info" json:"name"`

    Remark string `gorm:"column:remark;type:varchar(255);comment:Remark Info" json:"remark"`

}


type TestExt struct{

    Test 

    MoreInfo string `gorm:"->" json:"moreInfo"`

}


testext := TestExt{}

gormDB.Model(&Test{}).

    Select("*, 'testMoreInfoVal' AS more_info").

    Where(Test{ID: "0000000001"}).

    Find(&testext)


查看完整回答
反对 回复 2022-08-30
  • 1 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号