【发布时间】:2018-01-26 11:27:50
【问题描述】:
我有两个结构:
type GoogleAccount struct {
Id uint64
Token string
}
它代表我的自定义 PostgreSQL 对象类型(我自己创建的):
CREATE TYPE GOOGLE_ACCOUNT AS
(
id NUMERIC,
token TEXT
);
下一个结构是数据库中的表:
type Client struct {
IdClient uint64 `gorm:"primary_key"`
Name string
PhotoUrl string
ApprovalNumber uint16
Phone string
Password string
HoursOfNotice int8
Google GoogleAccount
}
我的自定义对象嵌套在客户端类型中并命名为google。我尝试通过下一种方式读取数据:
var users model.Client
db.First(&users)
但不幸的是,我无法读取字段google(具有默认值)。我不想用 google_account 创建单独的表,或者将此结构作为客户端表中的单独字段或将其打包为 json(创建单独的实体,因为此结构不仅用于此表,而且我正在寻找新的方法,即得到相同的结果,但更优雅)。任务不是简化表格中数据的呈现方式。我需要将对象从 postgres 到实体的正确映射。
现在我找到了一种解决方案 - 将 Scanner 实施到 GoogleAccount。但是输入法中的值是[]uint8。我可以假设, []uint8 可以转换为字符串,然后我可以解析这个字符串。这个字符串(保留在 db 中)看起来像 (x,x) - 其中 x - 是值。解析字符串并将值设置为对象是正确的方法吗?或者是通过 ORM 得到这个结果的方法吗?
是否有可能将这些数据作为嵌套结构对象读取?
【问题讨论】:
-
您有名为
Id和Token的列吗? -
你有没有尝试过自己解决它...请发布许多尝试或描述一些以显示努力。
-
为什么不想为自己的数据结构创建一个单独的表呢?为什么不直接将 Google ID 和令牌放在 Client 结构中,而不是创建一个您不想要的单独实体?不要规范化你不想规范化的东西?
-
@aerokite 是的,在嵌套字段
google中代表自己一个单独的结构 -
@G_V 我只想使用 PostresSQL 的所有可能性。我创建了单独的实体,因为这个结构不仅用在这个表中。而我的决定 - 这不是非规范化。只是我正在使用新方法,得到相同的结果,但更优雅
标签: postgresql go go-gorm