Вложенные структуры Gorm Preload

type MainStruct struct {
Defaults
Foo string
Bar string
Baz int64
Struct1  MyStruct1 `gorm:"foreignkey:MainStructID"`
}
type MyStruct1 struct {
    Defaults
    MainStructID int64                  `json:"-"`       
    ID1          int64                  `json:"-"` 
    ID2         int64                   `json:"-"` 
    MyDefault1     MyStruct2 `gorm: "foriegnkey:ID;association_foreignkey:ID1"`
    MyDefault2    MyStruct2 `gorm: "foriegnkey:ID;association_foreignkey:ID2"`
}
type MyStruct2 struct {
    Defaults
    Field1              string
    Field2           string
    Field3          string
}

Учитывая приведенные выше структуры, я хочу сделать что-то вроде

baseVersion MainStruct
db.Where("ID = ?", myInputID).Preload("Struct1").
        Preload("Struct1.MyDefault1").
        Preload("Struct1.MyDefault2").
        First(&baseVersion)

Проблема, с которой я столкнулся в настоящее время, заключается в том, что я вообще не получаю данные из struct2. Я думаю, что это проблема с аннотацией gorm в Struct1, создающей ассоциацию ... но я не уверен, что не так.

Независимо от того, как я пытался получить Preload od MyDefault1 и MyDefault2, я всегда получаю сообщение об ошибке, которое не может выполнить предварительную загрузку. Я предполагаю, что аннотация gorm не совсем правильная ... но, похоже, она соответствует шаблону, поэтому я не уверен, на что смотреть сейчас.


person Deslyxia    schedule 28.10.2019    source источник


Ответы (1)


  • В MyStruct1 есть орфографическая ошибка: foriegnkey foreignkey.
  • В значении тега MyStruct1 есть лишний пробел.

Эти причины не позволяют Горму анализировать отношения MyStruct1.

type MyStruct1 struct {
    Model
    MainStructID int64     `json:"-"`
    ID1          int64     `json:"-"`
    ID2          int64     `json:"-"`
    MyDefault1   MyStruct2 `gorm:"foreignkey:ID;association_foreignkey:ID1"`
    MyDefault2   MyStruct2 `gorm:"foreignkey:ID;association_foreignkey:ID2"`
}
person Cascax    schedule 27.05.2020