orm接口
o := orm.NewOrm()
post := models.Posts{Name:"post",CreateTime:time.Now(),Content:"xxxx"}
tag := models.Tags{Name:"tag",CreateTime:time.Now(),DescTag:"tag"}
// 插入post和tag数据
o.Insert(&post)
o.Insert(&tag)
//多对多插入
m2m := o.QueryM2M(&post,"Tags") //字符串是结构体名称
m2m.Add(&tag)
// 或者
m2m := o.QueryM2M(&tag,"Posts")
// m2m接口请看多对多操作接口章节
m2m.Add(&post)
// 可以使用已知的数据插入
post := models.Posts{Id:2}
tag := models.Tags{Id:2}
m2m := o.QueryM2M(&post,"Tags")
m2m.Add(&tag)
原生sql:注意desc字段名不能使用,和字段描述的关键字冲突了,修改模型的字段
ret_post, _ := o.Raw("insert into post(name,create_time,content) values(?,?,?)","post测试",time.Now(),"post内容").Exec()
ret_tag, _ := o.Raw("insert into tag(name,create_time,desc_tag) values(?,?,?)","tag测试",time.Now(),"tag描述").Exec()
post_id,_ := ret_post.LastInsertId()
tag_id,_ := ret_tag.LastInsertId()
o.Raw("insert into post_tags(post_id,tag_id) values(?,?)",post_id,tag_id).Exec()
models
新增
o := orm.NewOrm()
// 插入数据
article_many := one.ArticleMany{Id:3}
tags := one.Tags{Name: "Beego详解"}
o.Insert(&tags)
// 第一种方式
m2m := o.QueryM2M(&article_many,"Tags")
_,err := m2m.Add(&tags)
if err != nil{
c.Ctx.WriteString("失败")
}else{
c.Ctx.WriteString("成功")
}
package test_orm
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"beego_project/models"
"fmt"
)
type ManyToManyController struct {
beego.Controller
}
func (m *ManyToManyController) Get() {
o := orm.NewOrm()
// 插入数据
//article_many := models.ArticleMany{Id:3}
//tags := models.Tags{Name:"beego详解"}
//o.Insert(&tags)
// 第一种方式
//m2m := o.QueryM2M(&article_many,"Tags")
//m2m.Add(&tags)
// 第二种方式
//m2m := o.QueryM2M(&tags,"ArticleMany")
//m2m.Add(&article_many)
// remove 删除,删除关联的指定的帖子
//article_many := models.ArticleMany{Id:3}
tags := []models.Tags{{Id:1},{Id:2}}
//tags := models.Tags{Id:1} // 删除关联的指定的帖子
//m2m := o.QueryM2M(&article_many,"Tags")
//m2m.Remove(&tags)
//clear 删除,删除所有关联的帖子
//article_many := models.ArticleMany{Id:3}
//m2m := o.QueryM2M(&article_many,"Tags")
//m2m.Clear()
// count :计算数量
//article_many := models.ArticleMany{Id:3}
//m2m := o.QueryM2M(&article_many,"Tags")
//num,_ := m2m.Count()
//fmt.Println(num)
//exist:判断指定的关联数据存在与否
//article_many := models.ArticleMany{Id:3}
tags := models.Tags{Id:2}
//tags := models.Tags{Id:3}
//m2m := o.QueryM2M(&article_many,"Tags")
//is_exist := m2m.Exist(&tags)
//fmt.Println(is_exist)
// 更新数据
//aid := 3
//tid := 1
//
//new_aid := 5
//new_tid := 3
//
//qs := o.QueryTable("article_many_tags")
//qs.Filter("article_many_id",aid).Filter("tags_id",tid).Update(orm.Params{
// "article_many_id":new_aid,
// "tags_id":new_tid,
//})
// 查询数据
// 1.已知文章id,查询文章上绑定的标签信息 ,从article_many表正向
//aid := 3
//article_many := models.ArticleMany{}
//qs := o.QueryTable("article_many")
//qs.Filter("id",aid).One(&article_many)
//o.LoadRelated(&article_many,"Tags")
//fmt.Println(article_many)
//fmt.Println(article_many.Tags)
//for _,tag := range article_many.Tags {
// fmt.Println(tag)
//}
// 2.已知标签id,查询该标签绑定到了哪些文章上,从文章
tid := 3
qs := o.QueryTable("article_many")
article_many := []models.ArticleMany{}
qs.Filter("Tags__tags__id",tid).All(&article_many)
fmt.Println(article_many)
// 3.已知文章id,查询所有的标签信息 找不到该字段:ArticleMany__article_many__id
//aid := 3 // 反向查询标签
//qs := o.QueryTable("tags")
//tags := []models.Tags{}
//qs.Filter("ArticleMany__article_many__id",aid).All(&tags)
//fmt.Println(tags)
m.TplName = "test_orm/many_to_many.html"
}