select/find 型号时省略列

Omitting column when select/find model

我对我的模型有一些疑问:

type MaterieprimeAnalisi struct {
    GUIDAnalisiMP      string             `gorm:"size:50;not_null;primary_key;"`
    GUIDMP             null.String        `gorm:"size:50;"`
    Materieprime       Materieprime       `gorm:"foreignkey:GUIDMP;associationforeignkey:GUIDMP;"`
    GUIDPA             null.String        `gorm:"size:50;"`
    Parametrianalitici Parametrianalitici `gorm:"foreignkey:GUIDPA;associationforeignkey:GUIDPA;"`
    Valore             null.Float
}

当我 db.AutoMigrate() 这个 table 和相关的按预期创建时,关联和外键工作正常。 我的问题是,当我直接 select 所有行时,如何排除某些字段:

var ma []models.MaterieprimeAnalisi
res := db.Find(&ma)

或者当我和另一个加入时 table:

var ma []models.MaterieprimeAnalisi
res := db.Joins("Parametrianalitici").Find(&ma)

例如,如果我想从输出结果中省略 MaterieprimeParametrianalitici,我该怎么做?

GORM 文档通常很差。您可以通过三种方式完成查询中的省略列。第一种是使用 tx.Omit 函数。

var ma []models.MaterieprimeAnalisi
_ := db.Omit("Materieprime", "Parametrianalitici").Find(&ma)

但是,您永远不会在网站上的示例中找到此功能。 GORM 2.0 中推荐的方法是使用 tx.Select 或使用智能 Select 功能。

tx.Select可以像你想象的那样使用:

var ma []models.MaterieprimeAnalisi
_ := db.Select("GUIDAnalisiMP", "GUIDMP", "GUIDPA", "Valore").Find(&ma)

至于 Smart Select,您可以创建一个只包含您想要的字段的部分结构:

type MaterieprimeAnalisiSubset struct {
    GUIDAnalisiMP      string            
    GUIDMP             null.String          
    GUIDPA             null.String 
    Valore             null.Float
}
var ma []MaterieprimeAnalisiSubset
tx.Model(&models.MaterieprimeAnalisi{}).Find(&ma)

文档:Omit, Select, Smart Select