beego框架最近浏览多表关联

最近浏览也就是在我们浏览文章的时候给文章添加上用户信息,然后在再查询这些信息,在页面中显示。

  • 添加浏览信息
    我们这里是给文章表添加浏览的用户信息。代码如下:

      //获取ORM对象
        o := orm.NewOrm()
        //获取插入数据的对象
        var article models.Article
        article.Id = id
        o.Read(&article)
        //获取多对多操作对象,用的是函数QueryM2M(),第一个参数是要插入数据的对象,第二个参数是要插入数据的字段名,返回值是多对多操作对象
        m2m := o.QueryM2M(&article,"Users")
        //获取要插入的对象
        user := models.User{Name:userName.(string)}
        o.Read(&user,"Name")
        //多对多插入
        m2m.Add(user)
    
    • 显示浏览信息

    有两种显示多对多信息的方法
    第一种,直接加载多对多关系,用的函数是LoadRelated(),第一个参数是查询对象,第二个参数是多对多关系字段,代码如下:
    num,err := o.LoadRelated(&article,“Users”)
    这时候我们在前端就可以循环显示最近浏览的用户信息,这里我们用第二种视图循环语法:

    <label>最近浏览:</label>
    <p class="detail">{{range .article.Users}}{{.Name}} | {{end}}</p>
    

    这时候我们多点几次查看详情会发现个问题,我们添加关系的时候是浏览一次就添加一次,那么我们显示的时候就会重复显示相同用户的用户名,效果如下:

    但是我们一般浏览网页的时候,一个用户浏览过了只显示一次该用户信息即可,所以这里面我们需要去重,还记得我们前面介绍的高级查询去重的方法吗?Distinct()去重,但是这个函数必须要是queryseter对象才能操作,所以我们第一种多对多查询方法就不行了。这里我们用第二种多对多查询。代码如下:

    var users []models.User
    o.QueryTable("User").Filter("Articles__Article__Id",article.Id).Distinct().All(&users)
    

    注意:我们这里插入的是想article中插入user,但是查询的是从user中去获取。

**正向插入,反向查询,所以用user反向查询
由于o.read是惰性查询,所以需要用o.query

//o.Read(&article)
	o.QueryTable("Article").RelatedSel("ArticleType").Filter("Id",id).One(&article)

**

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值