我无法找到问题的答案。我在golang项目中使用jinzhu / gorm :) 我有以下结构:
type Catalog struct {
ID int64 `gorm:"primary_key" form:"id"`
SubDomainID int64 `form:"sub_domain_id"`
ServiceTypeID int64 `form:"service_type_id"`
Checked bool `form:"checked"`
CreatedAt time.Time `form:"created_at"`
UpdatedAt time.Time `form:"updated_at"`
SubDomain SubDomain
}
type SubDomain struct {
Id int64 `gorm:"primary_key" form:"id"`
NameRu string `form:name_ru`
url string `form:url`
}
当我尝试获取子域的预加载目录时:
var catalog Catalog
fmt.Println(catalog.SubDomain)
err := db.Preload("SubDomain").Where("checked = 0").First(&catalog).Error
if err != nil {
return &catalog, err
}
我收到以下错误:can't find field SubDomain in *models.Catalog
为什么会这样?
我希望会有2个查询:
从目录中选择*,其中checked = 0;
从sub_domains中选择*,其中id =(catalog.sub_domain_id)
答案 0 :(得分:0)
我对gorm还是很陌生,但我想我知道您的问题,并且也有(部分)解决方案。 如前所述(您自己也是这么说的),在应用“ select * from ...”时,它还会查找字段SubDomain(因为它在您的结构中)。 因此,我认为这应该可行:
var catalog Catalog
fmt.Println(catalog.SubDomain)
err := db.Preload("SubDomain").Select("ID","SubDomainID", "ServiceTypeID").Where("checked = 0").First(&catalog).Error
if err != nil {
return &catalog, err
}
请注意我如何指定确切的字段。更好的解决方案是使用反射编写一个函数来排除属于字段的成员。我本人正在使用类似的解决方案。看起来像这样:
for each member of Domain:
if member is string or boolean
fields.append(member).
return db.Select(fields) // actual gormdb's Select