beego中orm关联查询使用解析
这两天在学习beego框架,之前学习的时候遗漏了很多东西,比如orm、缓存、应用监控、模板处理等,这里将通过实例记录下如何使用beego自带的orm进行关联查询操作。
首先说明下,beego的orm有自动建表的功能,使用方法呢如下:
// 数据库别名
name := "default" // drop table 后再建表
force := true // 打印执行过程
verbose := true // 遇到错误立即返回
err := orm.RunSyncdb(name, force, verbose)
if err != nil {
fmt.Println(err)
}
不过我们这里不使用自动建表,而是使用pd设计好之后生成对应的sql文件,先看下数据库表关系设置:

主要关系是:
会员(用户) -> 文章:一对多
文章 -> 文章分类:多对一
文章 -> 评论:一对多
说明:beego的orm使用时,外键id在关联查询时会默认添加一个"_id"结尾,比如:文章表对应的作者id,orm在关联查询时会默认查询xxx_id,其中xxx为struct中定义的json字段全称,这样的话最好定义外键id时直接写成xxx_id形式,然后struct的字段的json tag写成xxx即可。
struct定义
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Nickname string `json:"nickname"`
Mobile string `json:"mobile"`
Age int `json:"age"`
Sex bool `json:"sex"`
Email string `json:"email"`
Address string `json:"address"`
Pass string `json:"pass"`
Addtime int `json:"addtime"`
Lastlogin int `json:"lastlogin"`
Articles []*Article `orm:"reverse(many)"`
}
type Article struct {
Id int `json:"id"`
Title string `json:"title"`
Content string `json:"content"`
Addtime int `json:"addtime"`
Uptime int `json:"uptime"`
User *User `json:"user" orm:"rel(fk)"`
Link string `json:"link"`
Intro string `json:"intro"`
Type *Articletype `json:"type" orm:"rel(fk)"`
Comments []*Comment `orm:"reverse(many)"` //反向一对多关联
}
type Articletype struct {
Id int `json:"id"`
Name string `json:"name"`
Orderno int `json:"orderno"`
Articles []*Article `orm:"reverse(many)"`
}
type Comment struct {
Id int `json:"id"`
Cname string `json:"cname"`
Cemail string `json:"cemail"`
Content string `json:"content"`
Addtime int `json:"addtime"`
Aid *Article `json:"article" orm:"rel(fk)"`
}
数据库数据如下:
文章表数据

文章分类表数据

会员表

关联查询
首先是一对多关联查询:
1、首先是根据用户查询所有文章
var articles []*models.Article
orm.NewOrm().QueryTable("article").Filter("User", 1).RelatedSel().All(&articles)
for _, v := range articles {
fmt.Println(v.Id)
}
测试如下,打印的sql及结果:

2、根据文章查询对应用户
var user models.User
err := orm.NewOrm().QueryTable("user").Filter("Name", "张三").Limit(1).One(&user)
if err == nil {
fmt.Println(user)
}
测试如下:

beego中orm关联查询使用解析的更多相关文章
- Hibernate-ORM:11.Hibernate中的关联查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将讲述Hibernate中的关联查询,及其级联(cascade)操作,以及指定哪一方维护关联关系的(i ...
- laravel 中with关联查询限定查询字段
学习了下laravel5.6框架,果然很优雅,比如ActiveJieSuan model中作如下关联:(laravel模型关联关系可以查看https://laravelacademy.org/post ...
- MyBatis 实践 -动态SQL/关联查询
MyBatis 实践 标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条 ...
- MyBatis从入门到放弃三:一对一关联查询
前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是使用association属性和resultM ...
- MyBatis:一对一关联查询
MyBatis从入门到放弃三:一对一关联查询 前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是 ...
- Eloquent ORM 之关联查询
小伙伴们好,本文是在我的前一篇随笔的基础上完成的,还没有浏览的同学,请移尊驾哦 Eloquent ORM学习笔记. 前一篇文章用到了leftJoin方法,其实Eloquent对于模块之间的关联查询有自 ...
- Django中ORM模型总结(一)[概述,查询语句]
理解ORM框架 概述 O:(objects)->类和对象. R:(Relation)->关系,关系数据库中的表格. M:(Mapping)->映射. 作用: 可以通过类和类对象就可以 ...
- Go项目中beego的orm使用和gorm的使用
按照beego官方文档练习ORM的使用,model创建完始终没找到办法创建表,于是使用gorm翻译文档和官方文档进行了练习,使用起来还是比较简单. 安装: 方法一:Terminal打开,go get ...
- ORM进阶之Hibernate中对象的三大状态解析
ORM进阶之 ORM简单介绍 ORM进阶之Hibernate简单介绍及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 在Hibernatea中每一 ...
随机推荐
- P2001xor-sigma 字典树,然而好坑
https://vijos.org/p/2001 设perXor[i]表示1---i的前缀异或值. 那么要得到某一段的异或值,只需要perXor[j] ^ perXor[i - 1] 那么我们把per ...
- GRUB密码设置
通过编辑GRUB启动参数可以轻松的进入单用户模式从而修改root密码,GRUB的密码设置可分为全局密码和菜单密码. 一,全局密码设置 在splashimage这个参数的下一行可以加上passw ...
- Oracle 包(Package)
引用这位大大的: http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包? 答:在一个大型 ...
- $watch监听数据变化和run方法
angular中$watch方法可以监听数据的变化. $scope.$watch('phone',function(){ $scope.phone.fre = $scope.phone.num> ...
- 第一章 第一个spring boot程序(转载)
第一章 第一个spring boot程序 本编博客转发自:http://www.cnblogs.com/java-zhao/p/5324185.html 环境: jdk:1.8.0_73 mave ...
- mysql 统计
每周: select count(*) as cnt,week(editdate) as weekflg from projects where year(editdate)=2007 group b ...
- tomcat 支持ssi功能配置
1.SSI是Server Side Includes 的缩写,是嵌入到HTML页面的一组指令的集合.在返回请求的页面(包含SSI指令前),服务器会处理这些指令,并用处理的结果替换指令,然后把页面返回. ...
- Win8 x64环境下VS2010 C#工程运行报错:没有注册类 (异常来自 HRESULT:0x80040154
来源:http://blog.sina.com.cn/s/blog_7095482001019c2v.html 问题描述: 在Win8 x64环境下,VS2010的C#工程中引用了COM组件(Acti ...
- Mac 系统下类似于 apt-get 的软件包管理器 -- Homebrew
对于一个习惯了在 Ubuntu 的终端上通过 apt-get 来安装工具软件的我来说,也希望在Mac上找到类似的工具,能很方便的一条命令就能安装所需的软件,而不用手工的去查找下载编译,或者是折腾安装所 ...
- UWP深入学习五: 传感器与搜索、共享及链接
Responding to motion and orientation sensors: Quickstart: Responding to user movement with the accel ...