Сохранение дополнительных данных с помощью GoLang

Итак, я использую Go Lang 1.10.3 с фреймворком Echo с Gorm и Postgres в качестве моей базы данных.

У меня есть три таблицы / структуры: Profile, Addresses и Profile_addresses.

Структуры следующие:

Профиль

type Profile struct {
  gorm.Model
  Company string `gorm:"size:255" json:"company"`
  AddedDate time.Time `gorm:"type:date" json:"date_added"`
  ProfileAddresses []ProfileAddress `gorm:"foreignkey:profile_fk" json:"address_id"`
}

Адрес

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 ProfileAddress struct {
  gorm.Model
  Archive bool `json:"archive"`

  Profile Profile
  Address Address
  AddressFK int`gorm:"ForeignKey:id"`
  ProfileFK int`gorm:"ForeignKey:id"`
}

Все эти таблицы настраиваются нормально, но теперь я пытаюсь сохранить идентификатор адреса в таблице адресов профиля при создании нового профиля. Отправка данных в /profile/add (с помощью Postman), включая следующие данные

{
  "company": "testing-000001",
  "date_added": "3051-11-09T00:00:00+00:00",
  "address_id": 3
}

Теперь я могу сохранить новый профиль и новый адрес, но не сохранить эти данные. Я только что добавил параметр json:"address_id"` в конец Profile struct, но это не сработало.

Я настроил это так, поскольку у одного профиля может быть много адресов, поэтому должна быть связанная таблица со всеми идентификаторами адресов. Я уверен, что смогу сделать это в два этапа, например сохраните профиль, затем сохраните адреса, которые я хочу добавить в этот профиль, но я бы хотел, чтобы это работало. Мне также не нужно создавать новый адрес, они уже были бы добавлены в систему.

Так что я делаю не так?

Любая помощь приветствуется.

Спасибо,


person C0ol_Cod3r    schedule 10.10.2018    source источник


Ответы (1)


Вот как я заставил это работать, пожалуйста, дайте мне знать, если это не так или есть лучший способ.

Итак, я добавил структуру Profile в оболочку / вложенную структуру, например:

type ProfileWrapper struct {
  gorm.Model
  ProfileData Profile
  AddressID int `json:"address_id"`
}

Затем я изменил / обновил данные json, которые я отправлял в эту структуру, на это:

{
  "ProfileData": {
      "company": "testing-with-add-0001",
      "date_added": "9067-11-09T00:00:00+00:00"
  },
  "address_id": 3
}

Итак, чтобы сохранить профиль, я сделал это,

db.Create( &p.ProfileData )

Затем я создал новую структуру для создания / добавления информации об адресе профиля, например:

pd := structs.ProfileAddress{AddressFK: p.AddressID, ProfileFK: profileID}

db.Create( &pd )

Не уверен, что это лучший способ сделать это, но, похоже, он работает. Если это не так, дайте мне знать.

Спасибо.

person C0ol_Cod3r    schedule 12.10.2018