postgres,go-gorm-无法预加载数据

问题描述 投票:0回答:1

我在使用gorm在PostgreSQL上查询一行时试图预加载一些数据

我通过belongs to关联定义了以下类型:

type MyObject struct {
    ID            uint      `grom:"column:id" json:"id"`
    Name          string    `gorm:"column:name" json:"name"`
    OwnerID       uint      `gorm:"column:owner_id" json:"owner_id"`
    Owner         Owner     `json:"owner"`
    ...
}

type Owner struct {
    ID         uint            `gorm:"column:id" json:"id"`
    Name       string          `gorm:"column:name" json:"name"`
    Config     json.RawMessage `gorm:"column:config" sql:"type:json" json:"config"`
    Components []uint8         `gorm:"column:components;type:integer[]" json:"components"`
}

和postgres db中的表,并按以下方式显示行

my_schema.my_object

id  | name      | owner_id  | ...
----|-----------|-----------|-----
0   | testobj   | 0         | ...


my_schema.owner

id  | name      | config    | components
----|-----------|-----------|-----------
0   | testowner | <jsonb>   | {0,1,2,3}

我正在使用gorm运行以下查询:

object := &models.MyObject{}

result := ls.Table("my_schema.my_object").
    Preload("Owner").
    Where("id = ?", "0").
    First(object)    

但是结果,在object中,我得到了以下结构:

{"id": 0, "name": "testobj", "owner_id":0, "owner": {"id": 0, "name": "", "config": nil, "components": nil}}

我没有收到任何错误或警告在数据库创建sql脚本中指定了Foreignkey关系

postgresql go preload go-gorm
1个回答
0
投票
所以,有两件事:

#1

result := ls.Table("my_schema.my_object"). Preload("Owner"). Where("id = ?", "0"). First(object)
您期望的是result只是gorm.DB对象。真正的结果是您正确传递给objectFirst()

所以,您根本不在这里检查错误,请将其更改为:

err := ls.Table("my_schema.my_object").Preload("Owner").Where("id = ?", "0").First(object).Error fmt.Println(err)


#2

除非您已实现gorm.Tabler()接口或使用过gorm.DefaultTableNameHandler;我真的怀疑"my_schema.my_object"是正确的表名。它应该是您的结构名称为"my_object"的snake_case。

根据您的用例,我建议使用Model(models.MyObject{})而不是Table(),这会为您免费提供一些类型安全性。

ID是主键,我不确定查找ID == 0是否有意义,因为起始值为1

© www.soinside.com 2019 - 2024. All rights reserved.