Gorm для загрузки связанных / связанных данных - PullRequest
0 голосов
/ 13 октября 2018

хорошо, так что я думаю, что мои структуры в порядке, но вот они,

Адрес профиля

type ProfileAddress struct {
  gorm.Model
  Archive bool `json:"archive"`

  Address Address
  AddressFK int `gorm:"ForeignKey:id" json:"-"`

  Profile Profile
  ProfileFK uint `gorm:"ForeignKey:id" json:"-"`  
}

Адрес

type Address struct {
  gorm.Model 
  AddressLine1 string `gorm:"size:255" json:"line1"`
  AddressLine2 string `gorm:"size:255" json:"line2"`
  AddressLine3 string `gorm:"size:255" json:"line3"`
  City string `gorm:"size:200" json:"city"`
  Country string `gorm:"size:255" json:"country"`
  Postcode string `gorm:"size:12" json:"postcode"`
  ProfileAddresses []ProfileAddress `gorm:"foreignkey:address_fk"`
}

Профиль

type Profile struct {
  gorm.Model
  Company string `gorm:"size:255" json:"company"`
  AddedDate time.Time `gorm:"type:date" json:"date_added"`
}

Это работает при создании моей базы данных (postgres работает в Docker).Но когда я делаю это,

profileAdd := []structs.ProfileAddress{}

db.Debug().Find( &profileAdd )

я получаю данные из таблицы Profile Address, но таблицы Address & Profile полностью пусты.

Я также пытался использоватьRelated и Preload, но ничего не работает.

Однако я могу заставить его работать, когда использую Raw Query, вот так:

rows, err := db.Raw("select addresses.address_line1, addresses.address_line2 from profile_addresses left join addresses on addresses.id = profile_addresses.address_fk where profile_addresses.deleted_at IS NULL").Rows()

if err != nil {
    fmt.Println(err)
}

defer rows.Close()

for rows.Next() {
    var testData structs.ProfileAddress
    rows.Scan(&testData.Address.AddressLine1, &testData.Address.AddressLine2)
    profileAdd = append(profileAdd, testData)
}
...