当前位置: 首页 > news >正文

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)

**

相关文章:

  • git相关的操作
  • redis 的sorted set 用法与golang操作redis中zadd
  • golang操作redis数据库
  • redis安装简介
  • golang序列化与反序列化
  • gob是Golang包序列化的编码/解码
  • redis主从搭建
  • fastdfs启动与停止示例
  • 常见网站的总结
  • 网站框架设计
  • beego发邮件服务--邮箱
  • beego框架使用session后报错runtime error: invalid memory address or nil pointer dereference
  • golang从结构体中解析出json
  • protobuf简单介绍
  • golang中md5加密算法
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • docker-consul
  • Java深入 - 深入理解Java集合
  • npx命令介绍
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring Cloud中负载均衡器概览
  • Webpack 4 学习01(基础配置)
  • 高度不固定时垂直居中
  • 如何学习JavaEE,项目又该如何做?
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 王永庆:技术创新改变教育未来
  • 微服务入门【系列视频课程】
  • 为视图添加丝滑的水波纹
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • HanLP分词命名实体提取详解
  • (javascript)再说document.body.scrollTop的使用问题
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三) diretfbrc详解
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)nsfocus-绿盟科技笔试题目
  • (转)我也是一只IT小小鸟
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .bat批处理出现中文乱码的情况
  • .net core Swagger 过滤部分Api
  • .NET Standard 的管理策略
  • .NET 药厂业务系统 CPU爆高分析
  • .net操作Excel出错解决
  • .pyc文件是什么?
  • /bin、/sbin、/usr/bin、/usr/sbin
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [Android学习笔记]ScrollView的使用
  • [BZOJ] 3262: 陌上花开
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C#]winform部署PaddleOCRV3推理模型
  • [C]编译和预处理详解