我有一个由几个结构组成的层次结构
type Entry struct {
Id int
CreatedAt time.Time
UpdatedAt time.Time
Fields []Field
}
type SyncField struct {
Id int
CreatedAt time.Time
UpdatedAt time.Time
TechnicalName string
JsonName string
EntryId int
Decorators []Decorator
}
type Decorator struct {
Id int
CreatedAt time.Time
UpdatedAt time.Time
Name string
Description string
SortingOrder int
Params string
SyncFieldId int
}
我的数据库创建是这样定义的:
db.CreateTable(&Entry{})
db.CreateTable(&SyncField{})
db.Model(&Entry{}).Related(&SyncField{}, "EntryId")
db.CreateTable(&Decorator{})
db.Model(&SyncField{}).Related(&Decorator{}, "DecoratorId")
一切都很清楚,并且可以正常预加载层次结构的一个“子级别”,如下所示:
entry := &Entry{Id: i}
iDB.Preload("SyncFields").First(entry)
或者
field := &SyncField{Id: idf}
iDB.Preload("Decorators").First(field)
我正在寻找一种使用 GORM 预加载整个层次结构的方法,在其中一个根元素上调用“First()”方法......我想加载一个带有所有相关“字段”的“条目”,我也想要让每个“字段”预装其所有“装饰器”......
使用几个“Preload()”函数是不可行的:
entry := &Entry{Id: i}
iDB.Preload("Decorators").Preload("SyncFields").First(entry)
我明白iDB.Preload("child1").Preload("child2").First(root)当 child1 和 child2 都是根的“叶子”时,“”是有效的。
所以我的问题是:是否可以用 gorm 来做到这一点,如果是,递归加载完整层次结构的最佳方法是什么?
相关分类