# 关联表查询

关联表的查询,一方面可以使用QuerySeter,一方面也可以使用QueryM2Mer

创建一个 QueryM2Mer 对象:

o := orm.NewOrm()
post := Post{Id: 1}
m2m := o.QueryM2M(&post, "Tags")
// 第一个参数的对象,主键必须有值
// 第二个参数为对象需要操作的 M2M 字段
// QueryM2Mer 的 api 将作用于 Id 为 1 的 Post
1
2
3
4
5
6

它的具体 API 有:

# QueryM2Mer Add

tag := &Tag{Name: "golang"}
o.Insert(tag)

num, err := m2m.Add(tag)
if err == nil {
	fmt.Println("Added nums: ", num)
}
1
2
3
4
5
6
7

Add 支持多种类型 Tag,*Tag,[]*Tag,[]Tag,[]interface{}

var tags []*Tag
...
// 读取 tags 以后
...
num, err := m2m.Add(tags)
if err == nil {
	fmt.Println("Added nums: ", num)
}
// 也可以多个作为参数传入
// m2m.Add(tag1, tag2, tag3)
1
2
3
4
5
6
7
8
9
10

# QueryM2Mer Remove

从 M2M 关系中删除 tag

Remove 支持多种类型 Tag *Tag []*Tag []Tag []interface{}

var tags []*Tag
...
// 读取 tags 以后
...
num, err := m2m.Remove(tags)
if err == nil {
	fmt.Println("Removed nums: ", num)
}
// 也可以多个作为参数传入
// m2m.Remove(tag1, tag2, tag3)
1
2
3
4
5
6
7
8
9
10

# QueryM2Mer Exist

判断 Tag 是否存在于 M2M 关系中

if m2m.Exist(&Tag{Id: 2}) {
	fmt.Println("Tag Exist")
}
1
2
3

# QueryM2Mer Clear

清除所有 M2M 关系

nums, err := m2m.Clear()
if err == nil {
	fmt.Println("Removed Tag Nums: ", nums)
}
1
2
3
4

# QueryM2Mer Count

计算 Tag 的数量

nums, err := m2m.Count()
if err == nil {
	fmt.Println("Total Nums: ", nums)
}
1
2
3
4