【问题标题】:Omitting column when select/find model选择/查找模型时省略列
【发布时间】:2020-11-12 18:57:19
【问题描述】:

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

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() 此表和相关表按预期创建时,关联和外键工作正常。 我的问题是,当我直接选择所有行时,如何排除某些字段:

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

或者当我加入另一个表时:

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

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

【问题讨论】:

    标签: go orm go-gorm


    【解决方案1】:

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

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

    但是,您永远不会在网站上的示例中找到此功能。 GORM 2.0 中推荐的方法是使用tx.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)
    

    文档:OmitSelectSmart Select

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-17
      • 2013-02-11
      • 2011-01-22
      • 2013-03-22
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      相关资源
      最近更新 更多