beego多表操作
type User struct{
Articles []*Articles `orm:"reverse(many)"`
}
type Article struct{
Users []*User `orm:"rel(m2m)"`
ArticleType *ArticleType `orm:"rel(fk)"`
}
type ArticleType struct{
Articles []*Articles `orm:"reverse(many)"`
}
1.rel(fk)
2.reverse(many)
3.rel(m2m)
fk就是外键foreign key
rel就是正向
reverse就是反向
再来一次
一个Article包含多个User
一个Article包含一个ArticleType
所以Article对User是正向
所以Article对ArticleType是正向
Article对User是多对多
Article对ArticleType是多对一
type User struct{
Articles []*Article `orm:"reverse(many)"`
}
type Article struct{
Users []*User `orm:"ref(m2m)"`
ArticleType ArticleType `orm:"ref(fk)"`
}
type ArticleType struct{
Articles []*Article `orm:"reverse(many)"`
}
继续
fun (this *ArticleController) HandleAddType(){
//获取数据
typeName := this.GetString("typeName")
//校验数据
if typeName==""{
beego.Error("类型名称为空")
this.Redirect("/addType", 302)
return
}
//获取orm对象
o := orm.NewOrm()
//获取插入对象
var articleType models.ArticleType
//给插入对象赋值
articleType.TypeName = typeName
//执行插入
_,err := o.Insert(&articleType)
if err!=nil{
beego.Error("类型名重复")
this.TplName="addType.html"
return
}
//返回
this.Redirect("/addType", 302);
}
再来
var article models.Article
article.Title=title
article.Content=content
article.Img="/static/img"+fileName+ext
var articleType models.ArticleType
articleType.TypeName=typeName
o.Read(&articleType, "TypeName")
article.ArticleType=&articleType
o.insert(&article)
this.Redirect("/index", 302)
为什么我们要用指针
在beego中,是规定
article.ArticleType=&articleType
article.ArticleType=articleType
Users []*User
Users []User
//获取数据
qs.Limit(page,start).RelatedSel("ArticleType").All(&articles)