文档章节

beego中orm关联查询使用解析

c
 caiyezi
发布于 2016/11/08 20:24
字数 585
阅读 45
收藏 1

这两天在学习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)
    }

测试如下:

 

本文转载自:http://www.cnblogs.com/vipzhou/p/5893568.html

共有 人打赏支持
c
粉丝 1
博文 108
码字总数 0
作品 0
西安
程序员
私信 提问
beego 中使用关联查询( join 查询)

beego 中使用关联查询( join 查询) 文档所在网址:这里 但直接使用 RelatedSel() 是不行,还必须先在 model中定义: 定义表字段为"rel(fk)",即外键,要定义其它类型的,请看文档。 命令行自...

阿桂1989
2018/07/26
0
0
beego 0.9.0 版本发布,Go 应用框架

经过大半个月的努力,beego又改进了很多东西,这一次的主要改动如下: 1、beego的官方网站上线了,里面有较为丰富的文档供大家入门:http://beego.me 2、更加智能化的路由功能,支持AutoRou...

astaxie
2013/08/14
3.6K
34
Beego Models 之 一

模型(Models)- beego ORM 原文 beego ORM 是一个强大的 Go 语言 ORM 框架。她的灵感主要来自 Django ORM 和 SQLAlchemy。 目前该框架仍处于开发阶段,可能发生任何导致不兼容的改动。 已支...

若与
2018/07/25
0
0
Go 应用框架 beego 1.7.0,新增改进功能

beego 1.7.0 版本发布了。beego是一个用Go开发的应用框架,思路来自于tornado,路由设计来源于sinatra 新增改进功能: 1. Filter访问速度提升7.5倍以上 #1799 2. Gzip压缩的时候支持不同的l...

astaxie
2016/08/30
5.3K
30
使用 beego 搭建 web 应用之二

欢迎回到本系列的第二部分,在这我们将用Go的Beego这个web开发框架来加速开发。如果你错过了第一部分,我建议你去读一下,因为它是这一系列的基础。 在第一部分中,我们有了一个好的开始,通...

astaxie
2014/06/28
8.4K
7

没有更多内容

加载失败,请刷新页面

加载更多

安卓constraintLayout中app:srcCompat设置的图片显示不出来

使用 app:srcCompat 的时候 引入的图片显示不出来的解决方案 首先查看的你的Activity 继承的是那个Activity 如果是继承AppcompatActivity 使用 ImageView的 app:srcCompat 是没有问题的 如果...

雨焰
40分钟前
1
0
MySQL mysqldump数据导出详解

MySQL mysqldump数据导出详解 2016-04-07 11:14 by pursuer.chen, 114348 阅读, 0 评论, 收藏, 编辑 介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用...

linjin200
40分钟前
0
0
Lucene 检索时的步骤

用户输入查询语句:lucene AND learned NOT hadoop 搜索主要分为以下几步 第一步、对查询语句进行词法分析,语法分析,及语言处理 词法分析主要用来识别单词和关键字 语法分析主要是根据查询...

kdy1994
41分钟前
2
0
Gradle Implementation vs API configuration

注: 可以把 Implementation理解为java类的private, 使用Implementation则外部依赖本库的代码引用不到本库Implementation的代码, 也就是降低依赖树的层级, 这样就可以避免外部代码编译时候, 导...

SuShine
45分钟前
2
0
pdf安卓手机适配以及ie的兼容 以及隐藏掉下载打印按钮的方式

这是我目前遇到pdf方面最多的问题。 在百度上搜了很多答案,结果都是建议使用插件。而目前百度能搜的插件基本上都是有缺陷的。自己测试了很多插件。最后使用了pdf.js这个插件。这个插件目前完...

流年那么伤
50分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部