这两天在学习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. zzuliOJ 1904小火山的股票交易;

    #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; # ...

  2. 利用Lambda获取属性名称

    感谢下面这篇博文给我的思路: http://www.cnblogs.com/daimage/archive/2012/04/10/2440186.html 上面文章的博主给出的代码是可用的,但是调用方 ...

  3. React Developer Tools 安装小提示

    1,在google市场里边,安装React Developer Tools之后,发现是开启的,但是按下F12后,并没有发现react选项 2,后来通过查资料,发现必须是运行react项目的时候,才出现 ...

  4. 和为S的两个数字

    /*  * 和为S的两个数字  * 题目描述  * 输入一个递增排序的数组和一个数字S,在数组中查找两个数  * 使得他们的和正好是S,如果有多对数字的和等于S,输出两个  * 数的乘积最小的.  * ...

  5. 分布式日志1 用c#的队列写日志

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. 1064. Complete Binary Search Tree (30)

    分析: 考察BST + 完全二叉树的性质,注意: (1):先用排序排好,然后由于是完全二叉树,我们使用中序来建树. (2):建好之后,层次遍历可以采用队列. #include <iostream ...

  7. 使用my exclipse对数据库进行操作(2)

    二.增加 public static void main(String[] args) {  //TODO Auto-generated method stub //4.用户输入需要添加的项目     ...

  8. 1055: [HAOI2008]玩具取名

    Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用"WING" ...

  9. Uploadify 上传文件插件详解

    Uploadify 上传文件插件详解 Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中 ...

  10. 在CentOS6.7操作系统上编译安装httpd2.4

    功能描述: 在CentOS6.7操作系统上,编译安装apache服务,实现定制功能等 一.安装前提 1)安装编译httpd需要的软件包 [root@bqe6tewv41kx ~]#  yum -y i ...