多对多操作
一、增加
// 一篇文章有多个帖子
article := relate_tables.Article2{
Title:"测试多对多标题1",
Content:"测试多对多内容1",
Desc:"测试多对多描述1",
Tags:[]relate_tables.Tag{{
Name:"django",
Desc:"django标签",
},
{
Name:"python",
Desc:"python标签",
},
},
}
ret := db.Create(&article)
fmt.Println(ret.Error)
或者先插入单表的,再关联插入
tag := relate_tables.Tag{Name:"beego2",Desc:"beego2标签"}
db.Create(&tag)
article := relate_tables.Article2{
Title:"测试多对多标题4",
Content:"测试多对多内容5",
Desc:"测试多对多描述5",
Tags:[]relate_tables.Tag{
tag,
},
}
db.Create(&article) // 这里不会重复插入前面create的数据
二、查询
1.Preload
var article relate_tables.Article2
db.Preload("Tags").Find(&article,1)
fmt.Println(article)
2.Association
var article relate_tables.Article2
db.First(&article,1)
db.Model(&article).Association("Tags").Find(&article.Tags)
fmt.Println(article)
3.Related
var article relate_tables.Article2
db.First(&article,1)
var tags []relate_table.Tag
db.Model(&article).Related(&tags, "Tags")
三、更新
// 先查询
var article relate_tables.Article2
db.Preload("Tags").Find(&article,1)
// 再更新,记得加条件
db.Model(&article.Tags).Where("name = ?","beego").Update("name","xxx")
四、删除
// 先查询
var article relate_tables.Article2
db.Preload("Tags").Find(&article,1)
// 再删除,记得加条件
db.Where("name = ?","xxx").Delete(&article.Tags)