【问题标题】:Many to many association with structs与结构的多对多关联
【发布时间】:2021-05-28 18:50:42
【问题描述】:

我在这里有这个数据结构:

我在将 Historique 和 Medicament 之间的多对多关联联系起来时遇到问题。 (历史就是一个病人看病的所有时间,治疗就是他接受的治疗,药物就是开的药)

我这里有这段代码,但我找不到将它们与所有这些外键链接的方法!


type Traitement struct {
    Histo_id         int `gorm:"primary_key"`
    Histo_patient_id int `gorm:"primary_key"`
    Histo_medecin_id int `gorm:"primary_key"`
    Medicament_id    int `gorm:"primary_key"`
    Debut_traitement string
    Fin_traitement   string
}
type Medicament struct {
    ID          int          `gorm:"primary_key"`
    Nom         string       `gorm:"column:medicament_nom"`
    Description string       `gorm:"column:medicament_desc"`
    Historique  []Historique `gorm:"many2many:tt_traitement"`
}
type Historique struct {
    Fk_patient_id        string `json:"-" gorm:"primary_key"`
    Date_consultation    string
    Fk_maladie_id        uint `json:"-" gorm:"primary_key"`
    Fk_compte_medecin_id uint
    Maladie              Maladie      `gorm:"ForeignKey:ID;AssociationForeignKey:Fk_maladie_id"`
    Medicament           []Medicament `gorm:"many2many:tt_traitement"`
}

func GetPatientWithDiseases(id uint) (*Patient, error) {
    patient := &Patient{}
    err := GetDB().Preload("Historique.Maladie").Preload("Historique.Traitement.Medicament").Find(&patient, id).Error
    if err != nil {
        return nil, err
    }
    return patient, nil
}


提前感谢您的帮助!

【问题讨论】:

    标签: go many-to-many go-gorm


    【解决方案1】:

    好的,经过一次幸运的尝试,我遇到了一个错误,让我走上了正确的道路。

    我删除了 Traitement 结构,以及 Medicament 结构中的 many_to_many 和 []Historique。我只保留:

    type Historique struct {
        ID                   int    `gorm:"primary_key"`
        Fk_patient_id        string `json:"-" gorm:"primary_key"`
        Date_consultation    string
        Fk_maladie_id        uint         `json:"-"`
        Fk_compte_medecin_id uint         `gorm:"primary_key"`
        Maladie              Maladie      `gorm:"ForeignKey:ID;AssociationForeignKey:Fk_maladie_id"`
        Medicament           []Medicament `gorm:"many2many:tt_traitement"`
    }
    
    type Medicament struct {
        ID          int    `gorm:"primary_key"`
        Nom         string `gorm:"column:medicament_nom"`
        Description string `gorm:"column:medicament_desc"`
    }
    
    
    func GetPatientWithDiseases(id uint) (*Patient, error) {
        patient := &Patient{}
        err := GetDB().Preload("Historique.Maladie").Preload("Historique.Medicament").Find(&patient, id).Error
        if err != nil {
            return nil, err
        }
        return patient, nil
    }
    

    一切顺利!我只需要重命名我的一些列,但由于它是一个虚拟数据库,所以这不是问题 :)!

    我希望这可以帮助那里的人!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      • 2011-07-22
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多