gorm jion查询映射(扫描scan)到新的结构体,必须使用select规定字段,与xorm的jion对比
时间:2022-07-22
本文章向大家介绍gorm jion查询映射(扫描scan)到新的结构体,必须使用select规定字段,与xorm的jion对比,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
https://blog.csdn.net/f95_sljz/article/details/103687308
gorm的文档对于我来讲比较难看懂,因为一直使用beego嘛。
文档对于返回值没有说,要加.Error才是返回错误
这个jion是非常好用的,如果不用jion,就要将查出来的结果,循环,赋给新的结构体,写法很不优雅。
而xorm的这种操作不需要select字段。
如下是xorm的jion:
type OnlyOfficeAttach struct {
OnlyOffice `xorm:"extends"`
OnlyAttachment `xorm:"extends"`
User `xorm:"extends"`
}
//分页取得所有项目
func GetDocList(offset, limit int) (docs []*OnlyOfficeAttach, err error) {
engine.Table("OnlyOffice").Join("INNER", "user", "user.id = onlyoffice.uid").
Join("INNER", "OnlyAttachment", "OnlyAttachment.id = onlyoffice.id").Limit(limit, offset).
Find(&docs)
return docs, err
}
如下是gorm的jion: 而且下列代码中,product表还可以再查project表,project表已经和最开始的cart表没有关系了。也就是表A——表B——表C,表A和表C没有关系,通过表B可以查表C。这种关联很厉害。
gorm必须使用select将要查的字段映射,否则返回不了值。
而且,这种关联,不需要什么外键啊,关联啊啥的,奇怪。jion和关联是什么关系?
//购物车表
type UserCart struct {
Id int64 `json:"id"`
UserId int64 `json:"userid"`
Status int `json:"status"`
UserNickname string `json:"usernickname"`
ProductTitle string `json:"producttitle"`
ProjectTitle string `json:"projecttitle"`
TopProjectTitle string `json:"topprojecttitle"`
}
//查询某个用户借阅记录
func GetUserCart(uid int64, limit, offset, status int) (usercarts []UserCart, err error) {
//获取DB
db := GetDB()
// 必须要写权select,坑爹啊
err = db.Table("cart").Select("cart.id,cart.user_id,cart.status,user.nickname as user_nickname, product.title as product_title, project.title as project_title, topproject.title as topproject_title").Where("user_id=?", uid).
Joins("left JOIN user on user.id = cart.user_id").
Joins("left join product on product.id = cart.product_id").
Joins("left join project on project.id = product.project_id").
Joins("left join project on project.id = product.top_project_id").
Limit(limit).Offset(offset).Scan(&usercarts).Error
return usercarts, err
}
- “AS3.0高级动画编程”学习:第三章等角投影(下)
- zabbix监控主机cpu达到80%后报警
- ssh登陆服务器locale告警的处理方法
- as3.0中如何阻止事件冒泡?
- Nginx+upstream针对后端服务器容错的运维笔记
- MongoDB日常运维操作命令小结
- flash builder代码格式化以及其它快捷键
- Repeater,DataList,DataGrid
- flash/flex builder在IE中stage.stageWidth始终为0的解决办法
- MongoDB集群运维笔记
- 水晶报表WEB方式下不打印的问题
- 针对负载均衡集群中的session解决方案的总结
- sliverlight:CompositionTarget.Rendering 的问题
- 分布式监控系统Zabbix-批量添加聚合图形
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中搭建完整的samba服务器全攻略(centos版)
- Thinkphp5 自定义上传文件名的实现方法
- PHP读取文件,解决中文乱码UTF-8的方法分析
- Linux低电量自动关机的实现办法
- php设计模式之工厂方法模式分析【星际争霸游戏案例】
- PHP+Apache实现二级域名之间共享cookie的方法
- linux虚拟机配置静态IP地址的完整步骤
- laravel-admin利用ModelTree实现对分类信息的管理
- Linux系统下快速配置HugePages的完整步骤
- Laravel5.1 框架关联模型之后操作实例分析
- PHP实现的多进程控制demo示例
- 你可能不知道的一些linux文件权限管理办法
- Laravel框架路由与MVC实例详解
- python实现学生管理系统开发
- 使用 chkconfig 和 systemctl 命令启用或禁用 Linux 服务的办法