这两天在学习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关联查询使用解析的更多相关文章

  1. Hibernate-ORM:11.Hibernate中的关联查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将讲述Hibernate中的关联查询,及其级联(cascade)操作,以及指定哪一方维护关联关系的(i ...

  2. laravel 中with关联查询限定查询字段

    学习了下laravel5.6框架,果然很优雅,比如ActiveJieSuan model中作如下关联:(laravel模型关联关系可以查看https://laravelacademy.org/post ...

  3. MyBatis 实践 -动态SQL/关联查询

    MyBatis 实践 标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条 ...

  4. MyBatis从入门到放弃三:一对一关联查询

    前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是使用association属性和resultM ...

  5. MyBatis:一对一关联查询

    MyBatis从入门到放弃三:一对一关联查询 前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是 ...

  6. Eloquent ORM 之关联查询

    小伙伴们好,本文是在我的前一篇随笔的基础上完成的,还没有浏览的同学,请移尊驾哦 Eloquent ORM学习笔记. 前一篇文章用到了leftJoin方法,其实Eloquent对于模块之间的关联查询有自 ...

  7. Django中ORM模型总结(一)[概述,查询语句]

    理解ORM框架 概述 O:(objects)->类和对象. R:(Relation)->关系,关系数据库中的表格. M:(Mapping)->映射. 作用: 可以通过类和类对象就可以 ...

  8. Go项目中beego的orm使用和gorm的使用

    按照beego官方文档练习ORM的使用,model创建完始终没找到办法创建表,于是使用gorm翻译文档和官方文档进行了练习,使用起来还是比较简单. 安装: 方法一:Terminal打开,go get ...

  9. ORM进阶之Hibernate中对象的三大状态解析

    ORM进阶之 ORM简单介绍 ORM进阶之Hibernate简单介绍及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 在Hibernatea中每一 ...

随机推荐

  1. Git版本控制教程

    Git 版本控制入门 不了解Git请查看权威Git书籍 ProGit(中文版). 一份很好的 Git 入门教程,点击这里查看. Git客户端下载地址: 官方Git - TortoiseGit - So ...

  2. 使用max() 函数

    /********************************* 代码功能:使用串口输出a和b的最大值 使用函数:max(a,b); 创作时间:2016*11*04 作者邮箱:jikexianfe ...

  3. [刘阳Java]_Java程序员的成长路线_第3讲

    按照Java从业人员的职位晋升来说,Java程序成长路线大致如下 Java程序员 JavaEE初级软件工程师 JavaEE中级软件工程师 JavaEE高级软件工程师 Java架构师 按照职业发展方向, ...

  4. URLEncoder编码

    客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文. 而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址, 将网址中的非ASCII码内容转换成可以 ...

  5. Memcache学习php完整一例

    header("Content-Type:text/html;charset=utf-8"); /* PHP设置分布式memcache存取 */ //创建memcache对象 $m ...

  6. LeetCode OJ--Swap Nodes in Pairs

    https://oj.leetcode.com/problems/swap-nodes-in-pairs/ 链表的处理 /** * Definition for singly-linked list. ...

  7. unity --项目总结

    最近做的unity的项目涉及到的问题如下: 1.绘制折线图问题: 起初利用的unity自带的linerender组件,这种方法绘制的线不均匀,效果不好.然后又利用画线插件Ves……开头的那个,结果那个 ...

  8. mysql 全文搜索的FULLTEXT

    FULLTEXT索引 创建FULLTEXT索引语法 创建table的时候创建fullText索引 CREATE TABLE table_name( column1 data_type, column2 ...

  9. java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)

    标题有点问题,没有进行修改. 一 Discuz论坛搭建步骤 1:服务器环境配置 服务器要支持php语言+支持mysql 5.0以上的数据库 + Apache服务器(支持网站的一个服务器,通过域名的能访 ...

  10. jQuery in action 3rd - Introducing jQuery

    2014 年 10 月, jQuery Foundation 的总裁 Dave Methvin 发布了一篇博客(http://blog.jquery.com/2014/10/29/jquery-3-0 ...