首页 > 其他分享 >GORM 关联查询

GORM 关联查询

时间:2024-06-17 18:24:05浏览次数:15  
标签:gorm Company Companies 关联 User 查询 TYPE GORM

GORM 关联查询

jouyouyun · 2018-12-05 11:34:43 · 4736 次点击 · 预计阅读时间 2 分钟 · 4分钟之前 开始浏览     这是一个创建于 2018-12-05 11:34:43 的文章,其中的信息可能已经有所发展或是发生改变。 第一次,站长亲自招 Gopher 了>>>

定义了一个 User 和 CompanyUser 中可以包含多个 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,Company,Companies,关联,User,查询,TYPE,GORM
From: https://www.cnblogs.com/cheyunhua/p/18252963

相关文章

  • Day28.学校与班级建关联
    1.学校与班级建关联_班级类,将班级和班级对应的课程信息生成对象'''班级'''classClass:#__init__中,初始化单个对象,记录每个班级独有的东西def__init__(self,class_name):self.class_name=class_name#初始班级时,班级没有课程表self......
  • 科技政策查询(五一极限)
    验收通过了,因为要赶车所以当场学习能力大爆发了,成功验收,也成功赶上了车。Control层packagecom.cxk.baseframe.project.systemmanage.controller;importjava.util.List;importjava.util.Map;importjavax.servlet.http.HttpServletResponse;importjavax.annotation.Resource;......
  • MYSQL查询语句报1 of ORDER BY clause is not in SELECT list
    我的语句如下:SELECTDISTINCT r.id, r.device_model_id, r.device_model_name, r.alarm_type_id, r.alarm_type_name, r.alarm_level, r.filter_condition, r.filter_condition_value, r.offline_tag, p.param_data_id, p.parmsFROM alarm_ruler, alarm_rule_pa......
  • Mybatis-Plus-Join(MPJ连表查询)
    mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到leftjoin或rightjoin的左右连接,你还是得老老实实的打开xml文件,手写上一大段的sql语句一款叫做mybatis-plus-join的工具(后面就简称mpj了),可以不......
  • 聚焦 Navicat 17 新特性 | 查询与配置的革新之处
    随着Navicat17的发布,引起业界热烈讨论与关注,这也标志着Navicat的产品力再次飞跃。新版本引入的众多创新特性极大地提升了用户在数据库管理和数据分析方面的体验,涵盖模型设计与同步、数据字典、数据分析(dataprofiling)、优化的用户界面与交互、跨平台兼容性、智能查询优化......
  • Dynamics CRM 365 使用FetchXml 查询数据(Query data using FetchXml )
    前言FetchXml是一种基于XML的专有查询语言,用于从Dataverse检索数据。添加引用Microsoft.CrmSdk.CoreAssembliesSystem.Configuration检索数据(Retrievedata)RetrieveMultipleusingMicrosoft.Xrm.Sdk.Query;usingMicrosoft.Xrm.Sdk;usingMicrosoft.Xrm.Tooling.C......
  • 探秘大数据信用报告:最佳查询方式
    大数据信用报告查询方式一般有几种?哪种比较好?在了解这个问题之前,想必你对大数据信用与人行信用的区别都是比较清楚了,本文呢就着重讲一下大数据信用报告查询方式有几种,哪种比较好,感兴趣的朋友不妨一起去看看。大数据信用报告常见的三种查询方式:一、二维码分享......
  • 7、Oracle中的子查询
    最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。视频链接:【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用如果有侵权,请联系删除,谢谢。学习目标:描述子查询可以解决的问题。定义子查询。列出子查询的类型。......
  • 政策查询系统(安卓)6
    编写安卓的界面<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-au......
  • 政策查询系统(安卓)7
    配置plugins{id("com.android.application")}android{namespace="com.example.policyquery"compileSdk=34defaultConfig{applicationId="com.example.policyquery"minSdk=28targetSdk=34......