关联表查询

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

创建一个 QueryM2Mer 对象:

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

它的具体 API 有:

QueryM2Mer Add

  1. tag := &Tag{Name: "golang"}
  2. o.Insert(tag)
  3. num, err := m2m.Add(tag)
  4. if err == nil {
  5. fmt.Println("Added nums: ", num)
  6. }

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

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

QueryM2Mer Remove

从 M2M 关系中删除 tag

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

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

QueryM2Mer Exist

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

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

QueryM2Mer Clear

清除所有 M2M 关系

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

QueryM2Mer Count

计算 Tag 的数量

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