当前位置: 首页 > 面试题库 >

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

曾鸿振
2023-03-14
问题内容

我有两个结构:

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获得此结果的方法?

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


问题答案:

现在,我找到了一个解决方案-将 Scanner
实施为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
}


 类似资料:
  • 我试图建立一个方面的导航使用elasticsearch为一个电子商务网站。 商店产品可以有多个变体。我想到的文档结构如下所示: 我将变体定义为嵌套类型。这样,以下查询将返回包含匹配筛选器的变体的所有文档: 现在,我真的希望获得与过滤器匹配的变体的id,以便在类别页面上显示该产品的变体。因此,在本例中,我希望返回第二个变量(1_b)的id。我只获取ResultSet中返回的文档的id。有什么方法可以

  • 问题内容: 我正在尝试在GORM中定义树结构。这是我的模型: 插入似乎可以正常工作,但是当我无法加载具有多个级别和子级别的Tree时。我想我在关系中错过了一些东西:-树应该引用rootLevel(以及可选地引用所有子级别)-一个级别应该引用其父级别,其子级别和全局父树 您能指出我正确的方向以获得这样的树结构吗?谢谢 问题答案: 我最终得到了这个解决方案(感谢朋友): 和 我错过了Tree和Leve

  • 问题内容: 我试图找出如何递归地在此JSON对象中搜索节点。我尝试了一些但无法获得的东西: 这是我无法使用的解决方案,可能是因为当子节点在数组中时,第一个节点只是一个值: 问题答案: 您的代码只是缺少一个循环来检查数组中节点的每个子节点。此递归函数将返回节点的属性,或者如果树中不存在标签,则返回该属性: 您还可以使用显式堆栈进行迭代,该堆栈更快,更凉爽并且不会导致堆栈溢出:

  • 问题内容: 我已经开始使用https://mholt.github.io/json-to-go/将API JSON转换为go结构,但我真的很喜欢它,但是我仍然坚持如何在Report Definition结构中初始化Filters数组结构如下所示。 我似乎无法引用在Filters结构甚至是Filters结构中声明的项,以创建新的Filter项目并将其附加到Filters。 是否可以使用原样编写的Re

  • 我的Firebase结构如下: 我想使用AngularFire将用户转换为数组,以便使用AngularFire对其进行过滤,如下所示: 问题是,我还需要Lessons对象的子对象数。当我记录userListfb时,它是一个数组。但是在数组中,课程节点仍然是一个对象。我无法使用长度来获取其长度。使用Firebase AngularFire查找课程节点的子节点数的正确方法是什么? 根据Frank的解决

  • 问题内容: 我有一个嵌套的结构。这些是由json解组器构造的。 但是,此结构中的某些字段是’omitifempty’的,因此我以一个可以在各个位置包含nill的结构结束op。 示例(真正的东西嵌套得更深,很大:400行结构): 问题是,是否存在一种更通用的方法来测试参考树中的某个节点是否为nil?我需要获得很多不同的项目,而编写所有这些if语句将很痛苦。哦,速度值得关注。 问题答案: 一种优雅的处