You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go项目中Gorm关联SQL视图与数据表的报错解决求助

解决Gorm关联SQL视图的错误

问题原因

Gorm关联时要求模型有明确的主键,且关联字段需配置正确的外键与引用关系。你的Os结构体未指定主键,同时Laudo中Os字段的关联规则不明确,导致触发报错。

修复步骤

  1. 为Os结构体指定主键:SQL视图虽无物理主键,但需告知Gorm用哪个字段作为关联标识,这里选择NOs(对应视图的OSRV列)作为主键。
  2. 配置Laudo中Os字段的关联规则:明确外键为Laudo的NumOsID,引用Os的NOs字段。

修改后的Os结构体

type Os struct {
    NOs         string    `json:"n_os" gorm:"primaryKey;column:OSRV"` // 添加primaryKey标签
    DataOs      time.Time `json:"data_os" gorm:"column:DTA_CHAM"`
    Descricao   string    `json:"descricao" gorm:"column:MOT_MANT"`
    Fornecedor  string    `json:"fornecedor" gorm:"column:NM_FRNC"`
    Localizacao string    `json:"localizacao" gorm:"column:Localizacao"`
    Cidade      string    `json:"cidade" gorm:"column:NM_MUN"`
    Uf          string    `json:"uf" gorm:"column:SG_UF"`
    Tipo        string    `json:"tipo" gorm:"column:NOM_ITEM"`
    Situacao    string    `json:"situacao" gorm:"column:DESC_SITU"`
    Depreciacao string    `json:"depreciacao" gorm:"column:DEPRECIACAO"`
    Nbem        string    `json:"n_bem" gorm:"column:NRO_UNIV"`
}

func (Os) TableName() string {
    return "ordensServico"
}

修改后的Laudo结构体

type Laudo struct {     
    gorm.Model  
    NumOsID           string        `json:"num_os"` 
    DataLaudo         time.Time    `json:"data_laudo"`  
    JustificativaID   int          `json:"JustificativaID"` 
    Justificativa     Justificativa`gorm:"foreignKey:JustificativaID"`  
    FunciAcompanhante string       `json:"funci_acompanhante"`  
    SituacaoID        int          `json:"situacaoID"`  
    Situacao          Situacao     `gorm:"foreignKey:SituacaoID"`   
    Anexos            []Arquivo    `json:"anexos"`  
    Os                Os           `json:"os" gorm:"foreignKey:NumOsID;references:NOs"` // 配置关联规则
}

关联查询示例

现在可通过Preload实现关联查询,直接获取Laudo.Os.Cidade:

var laudo Laudo
db.Preload("Os").First(&laudo, "num_os = ?", "目标OS编号")
// 访问laudo.Os.Cidade即可获取对应视图数据

内容的提问来源于stack exchange,提问作者Spinassi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:25:10