孙外键
Grandchild foreign key
我正在用 Go 创建一个 rest 应用程序,并且正在为我的 orm 使用 GORM。到目前为止,我已经成功地实现了所有内容,但是我现在想向我的模型添加一些进一步的细节,以使前端应用程序更容易。
这将添加“孙子”外键(想不出更好的称呼)。我在文档中看不到任何关于此的内容,但实际上我想要的是以下内容:
type Map struct{
Id int `gorm:"primaryKey"`
Buildings []Building `gorm:"references:Id"`
}
type Building struct{
Id int `gorm:"primaryKey"`
MapId int
Floors []Floor `gorm:"references:Id"`
}
type Floor struct{
Id int `gorm:"primaryKey"`
BuildingId int
MapId int
}
澄清一下,我不确定如何将地图 ID 放入 Floor 结构的数据库中,并且通过阅读文档我似乎无法找到这样做的方法,如果有人可以 link对于一些很棒的文档或示例,请注意:我不想仅在 ID 内保留地图实例。
将来发现此问题的人的答案:
在 GORM git 页面上发布后(https://github.com/go-gorm/gorm/issues/3788) i was directed towards hooks: https://gorm.io/docs/hooks.html#Hooks
我解决这个问题的代码是为每个子级别使用 before create wgere 然后在子结构列表上迭代设置适当的值,如下所示:
func (building *Building) BeforeCreate(tx *gorm.DB) (err error){
for i := 0; i < len(building.Floors); i++ {
building.Floors[i].MapId = building.MapId
}
return
}
我正在用 Go 创建一个 rest 应用程序,并且正在为我的 orm 使用 GORM。到目前为止,我已经成功地实现了所有内容,但是我现在想向我的模型添加一些进一步的细节,以使前端应用程序更容易。
这将添加“孙子”外键(想不出更好的称呼)。我在文档中看不到任何关于此的内容,但实际上我想要的是以下内容:
type Map struct{
Id int `gorm:"primaryKey"`
Buildings []Building `gorm:"references:Id"`
}
type Building struct{
Id int `gorm:"primaryKey"`
MapId int
Floors []Floor `gorm:"references:Id"`
}
type Floor struct{
Id int `gorm:"primaryKey"`
BuildingId int
MapId int
}
澄清一下,我不确定如何将地图 ID 放入 Floor 结构的数据库中,并且通过阅读文档我似乎无法找到这样做的方法,如果有人可以 link对于一些很棒的文档或示例,请注意:我不想仅在 ID 内保留地图实例。
将来发现此问题的人的答案:
在 GORM git 页面上发布后(https://github.com/go-gorm/gorm/issues/3788) i was directed towards hooks: https://gorm.io/docs/hooks.html#Hooks
我解决这个问题的代码是为每个子级别使用 before create wgere 然后在子结构列表上迭代设置适当的值,如下所示:
func (building *Building) BeforeCreate(tx *gorm.DB) (err error){
for i := 0; i < len(building.Floors); i++ {
building.Floors[i].MapId = building.MapId
}
return
}