内容简介:定义了一个在查询使用
定义了一个 User
和 Company
, User
中可以包含多个 Company
, 如下:
type User struct { ID int `gorm:"TYPE:int(11);NOT NULL;PRIMARY_KEY;INDEX"` Name string `gorm:"TYPE: VARCHAR(255); DEFAULT:'';INDEX"` Companies []Company `gorm:"FOREIGNKEY:UserId;ASSOCIATION_FOREIGNKEY:ID"` CreatedAt time.Time `gorm:"TYPE:DATETIME"` UpdatedAt time.Time `gorm:"TYPE:DATETIME"` DeletedAt *time.Time `gorm:"TYPE:DATETIME;DEFAULT:NULL"` } type Company struct { gorm.Model Industry int `gorm:"TYPE:INT(11);DEFAULT:0"` Name string `gorm:"TYPE:VARCHAR(255);DEFAULT:'';INDEX"` Job string `gorm:"TYPE:VARCHAR(255);DEFAULT:''"` UserId int `gorm:"TYPE:int(11);NOT NULL;INDEX"` }
在查询 User
时希望把 Company
的信息也一并查询, 有以下三种方法:
Related
使用 Related
方法, 需要把把 User
查询好, 然后根据 User
定义中指定的 FOREIGNKEY
去查找 Company
, 如果没定义, 则调用时需要指定, 如下:
var u User db.First(&u) db.Model(&u).Related(&u.Companies).Find(&u.Companies)
User
列表时遍历列表一一查询 Company
Association
使用 Association
方法, 需要把把 User
查询好, 然后根据 User
定义中指定的 AssociationForeignKey
去查找 Company
, 必须定义
, 如下:
var u User db.First(&u) db.Model(&u).Association("Companies").Find(&u.Companies)
Preload
使用 Preload
方法, 在查询 User
时先去获取 Company
的记录, 如下:
// 查询单条 user var u User db.Debug().Preload("Companies").First(&u) // 对应的 sql 语句 // SELECT * FROM users LIMIT 1; // SELECT * FROM companies WHERE user_id IN (1); // 查询所有 user var list []User db.Debug().Preload("Companies").Find(&list) // 对应的 sql 语句 // SELECT * FROM users; // SELECT * FROM companies WHERE user_id IN (1,2,3...);
本文中是一对多, 一对一的也是类似的, 完整代码见: GORM Related
以上所述就是小编给大家介绍的《GORM 关联查询》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Mybatis关联查询(嵌套查询)
- sql多表关联查询
- Flink 维表关联系列之 Redis 维表关联:实时查询
- 一文详解 SQL 关联子查询
- java 分库关联查询工具类
- 利用分析函数改写范围判断自关联查询
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
响应式Web设计
本·弗莱恩 (Ben Frain) / 奇舞团 / 人民邮电出版社 / 2017-2-1 / CNY 59.00
本书将当前Web 设计中热门的响应式设计技术与HTML5 和CSS3 结合起来,为读者全面深入地讲解了针对各种屏幕大小设计和开发现代网站的各种技术。书中不仅讨论了媒体查询、弹性布局、响应式图片,更将最新和最有用的HTML5 和CSS3 技术一并讲解,是学习最新Web 设计技术不可多得的佳作。一起来看看 《响应式Web设计》 这本书的介绍吧!