Omitting column when select/find model

Viewed 761

I have some questions about my 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
}

The associations and the foreignkeys works fine, when I db.AutoMigrate() this table and the related ones are being created as expected. My question is, how can I exclude some fields when I directly select all the rows:

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

Or when I join it with another table:

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

If, for example, I would like to omit Materieprime or Parametrianalitici from the output result how could I do it?

1 Answers

GORM documentation is often poor. There are three ways you can accomplish omitting columns in your query. The first is by using the tx.Omit function.

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

You will never find this function in the examples on the website, however. The recommended way in GORM 2.0 is by using tx.Select or using the Smart Select feature.

tx.Select can be used just as you imagine:

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

As for Smart Select, you can create a partial struct which contains only the fields you want:

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

Documentation: Omit, Select, Smart Select

Related