在gorm中的结构中获取嵌套对象

我有两个结构:

type GoogleAccount struct {

Id uint64

Token string

}

它代表我的自定义PostgreSQL对象类型(我自己创建):

CREATE TYPE GOOGLE_ACCOUNT AS

(

id NUMERIC,

token TEXT

);

下一个结构是DB中的表:

type Client struct {

IdClient uint64 `gorm:"primary_key"`

Name string

PhotoUrl string

ApprovalNumber uint16

Phone string

Password string

HoursOfNotice int8

Google GoogleAccount

}

我的自定义对象嵌套在Client类型中,名为google。我尝试通过以下方式读取数据:

var users model.Client

db.First(&users)

但不幸的是,我无法读取字段google(具有默认值)。我不想使用google_account创建单独的表,也不希望将此结构作为客户端表中的单独字段或将其打包为json(创建单独的实体,因为该结构不仅在此表中使用,而且我正在寻找新的方式,得到相同的结果,但更为优雅)。任务

。我需要 地将对象从Postgres 到实体。

现在,我找到了一个解决方案-将Scanner实施到GoogleAccount。但是输入法中的值为[] uint8。如我所料,[]

uint8可以转换为字符串,然后可以解析此字符串。该字符串(保存在db中)看起来像(x,x)-其中x-

是值。解析字符串并将值设置为对象的正确方法是吗?还是通过ORM获得此结果的方法?

是否有可能将这些数据读取为嵌套结构对象?

回答:

现在,我找到了一个解决方案-将

实施为GoogleAccount。在输入Scan方法时[]uint8,我将其转换为字符串并最终进行解析。这个字符串(保存在db中)看起来像(x,x)-其中x-是值。当然,这不是实现我目标的正确方法。但是我找不到其他解决方案。

我 按关系使用经典绑定,或者简单地将表中的这些字段保留为最简单的值(而不是作为对象)。

但是,如果您想在表中尝试嵌套对象,可以看看我的实现,也许对您有用:

type Client struct {

// many others fields

Google GoogleAccount `json:"google"`

}

type GoogleAccount struct {

Id uint64 `json:"id"`

Token string `json:"token"`

}

func (google GoogleAccount) Value() (driver.Value, error) {

return "(" + strconv.FormatUint(google.Id, 10) + "," + google.Token + ")", nil

}

func (google *GoogleAccount) Scan(value interface{}) error {

values := utils.GetValuesFromObject(value)

google.Id, _ = strconv.ParseUint(values[0], 10, 64)

google.Token = values[1]

return nil

}

以上是 在gorm中的结构中获取嵌套对象 的全部内容, 来源链接: utcz.com/qa/432402.html

回到顶部