在学习beego的过程中,自己服务有关于自关联的需求,但是查看官方文档并没有看到go orm关于自关联的使用,在关系处理的基础上,笔者尝试了自关联的处理
在多次尝试之后,终于成功了,以下分享一下关于自关联的处理,希望对路过的你有所帮助,如有不足和错误之处,还望批评指出,谢谢!!!
model下模型
type Area struct {
Uuid string `json:"value" orm:"column(uuid);pk"`
Name string `json:"label" orm:"size(64);column(name)"`
Adcode string `json:"-" orm:"size(64);column(adcode)"`
Level string `json:"-" orm:"size(64);column(level)"`
Center string `json:"-" orm:"size(64);column(center)"`
Parent *Area `json:"-" orm:"rel(fk);default(nil);description(父uuid)"`
Children []*Area `json:"children, omitempty" orm:"reverse(many)"`
}
方法返回
func GetAllAreas() []*Area {
var areas []*Area
q := O.QueryTable("tb_area").Filter("adcode", "100000")
q.All(&areas)
for _,a := range areas{
O.LoadRelated(a,"Children")
for _,p := range a.Children{
O.LoadRelated(p,"Children")
for _,c := range p.Children{
O.LoadRelated(c,"Children")
}
}
}
return areas
返回数据
数据将以树状返回,成功实现自关联