使用GoLang保存额外的数据

时间:2018-10-10 17:54:27

标签: postgresql go go-gorm

所以我将Go Lang 1.10.3和Echo框架一起使用,并将Gorm和Postgres作为数据库。

我有三个表/结构,配置文件,地址和配置文件地址

结构如下,

个人资料

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时尝试将地址ID保存到Profile Address表中。 (包括邮递员)将数据发布到 /profile/add (包括邮递员)

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

现在,我可以保存一个新的配置文件和一个新的地址,但不能保存此数据。我只是在json:"address_id"`的末尾添加了Profile struct选项,但这没有用。

我已经这样设置,因为一个配置文件可能有很多地址,因此需要一个包含所有地址ID的链接表。我确定我可以分两个步骤进行操作,例如保存配置文件,然后保存我想添加到该配置文件中的地址,但我想使其正常工作。我也不需要创建新地址,这些地址已经被添加到系统中。

那我在做什么错了?

最有帮助的人。

谢谢

1 个答案:

答案 0 :(得分:0)

这就是我的工作方式,如果这不正确或有更好的方法,请告诉我。

因此,我将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 )

不确定这是否是最好的方法,但似乎可行。如果这是错误的,请告诉我。

谢谢。