# 关联表查询
关联表的查询,一方面可以使用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
2
3
4
5
6
它的具体 API 有:
- Add(...interface{}) (int64, error)
- Remove(...interface{}) (int64, error)
- Exist(interface{}) bool
- Clear() (int64, error)
- Count() (int64, error)
# 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
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
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
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
2
3
# QueryM2Mer Clear
清除所有 M2M 关系
nums, err := m2m.Clear()
if err == nil {
fmt.Println("Removed Tag Nums: ", nums)
}
1
2
3
4
2
3
4
# QueryM2Mer Count
计算 Tag 的数量
nums, err := m2m.Count()
if err == nil {
fmt.Println("Total Nums: ", nums)
}
1
2
3
4
2
3
4