所以我将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的链接表。我确定我可以分两个步骤进行操作,例如保存配置文件,然后保存我想添加到该配置文件中的地址,但我想使其正常工作。我也不需要创建新地址,这些地址已经被添加到系统中。
那我在做什么错了?
最有帮助的人。
谢谢
答案 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 )
不确定这是否是最好的方法,但似乎可行。如果这是错误的,请告诉我。
谢谢。