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: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


拉丁的传说
浏览 204回答 1
1回答

ABOUTYOU

如果设置了表结构并且您没有使用AutoMigrate,那么只需更改标签以使MoreInfo成为只读字段并确保使用别名来匹配Gorm执行DB -> Go命名转换的方式即可解决此问题。more_infotype 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go