• gorm 关联查询总结


    结构体:

    type Device struct {
       ID           int64              `gorm:"column:id" json:"id"`
       HardwareId   string             `gorm:"column:hardware_id" json:"hardwareId"`
       ModelId      int64              `gorm:"column:model_id" json:"modelId"`
       IsBind       int64              `gorm:"column:is_bind" json:"isBind"`
       ReleaseDate  webgo.JsonDateTime `gorm:"column:release_date" json:"releaseDate"`
       StoreId      int64              `gorm:"column:store_id" json:"storeId"`
       Status       int64              `gorm:"column:status" json:"status"`
       CreateTime   webgo.JsonDateTime `gorm:"column:create_time" json:"createTime"`
       UpdateTime   webgo.JsonDateTime `gorm:"column:update_time" json:"updateTime"`
       DeviceNumber string             `gorm:"column:device_number" json:"deviceNumber"`
       Alias        string             `gorm:"column:alias" json:"alias"`
       OnlineDevice string             `json:"onlineDevice"`
    
       OtherData map[string]interface{}
    
       DeviceModular []DeviceModular   `gorm:"ForeignKey:DeviceID"`
       
    }
    type DeviceModular struct {
       ID          int64              `gorm:"column:id" json:"id"`
       DeviceId    int64              `gorm:"column:device_id" json:"deviceId"`
       ModularId   int64              `gorm:"column:modular_id" json:"modularId"`
       ModularType int64              `gorm:"column:modular_type" json:"modularType"`
       InstallSite int64              `gorm:"column:install_site" json:"installSite"`
       ConType     int64              `gorm:"column:con_type" json:"conType"`
       CreateTime  webgo.JsonDateTime `gorm:"column:create_time" json:"createTime"`
       Coin        int64              `gorm:"column:coin" json:"coin"`
       CtrlFall    int64              `gorm:"column:ctrl_fall" json:"ctrlFall"`
       DefaultFall int64              `gorm:"column:default_fall" json:"defaultFall"`
       ActualFall  int64              `gorm:"column:actual_fall" json:"actualFall"`
    
       CommWeimaqi CommWeimaqi        `gorm:"ForeignKey:ID;"`
    }
    
    type CommWeimaqi struct {
       ID              int64              `gorm:"column:id" json:"id"`
       WeimaqiId       string             `gorm:"column:weimaqi_id" json:"weimaqiId"`
       Tag             string             `gorm:"column:tag" json:"tag"`
       MarkeType       string             `gorm:"column:marke_type" json:"markeType"`
       Rssi            string             `gorm:"column:rssi" json:"rssi"`
       IsBind          int64              `gorm:"column:is_bind" json:"isBind"`
       HardwareVersion string             `gorm:"column:hardware_version" json:"hardwareVersion"`
       NetworkingType  int64              `gorm:"column:networking_type" json:"networkingType"`
       Status          int64              `gorm:"column:status" json:"status"`
       CreateTime      webgo.JsonDateTime `gorm:"column:create_time" json:"createTime"`
       UpdateTime      webgo.JsonDateTime `gorm:"column:update_time" json:"updateTime"`
    }

    三个结构体  device里面包含多个devicemodular,  devicemodular 包含一个commweimaqi

    现在需要查询单条device记录和多条device记录,并将其中的关联的关系数据一起查询出来

    var device []model.Device
    //db.SqlDB.First(&device).Preload("CommWeimaqi").Related(&device.DeviceModular)   //查询单条device记录
    db.SqlDB.Preload("DeviceModular.CommWeimaqi").Preload("DeviceModular").Find(&device) //查询所有device记录

    type User struct {
        gorm.Model
        Name string
        Company []Company
    }
    
    type Company struct {
        gorm.Model
        Job    string
        User   User
        UserID int
    }
    
    
        var user User
        var company []Company
    
        user.ID = 1
    
        db.Model(&user).Related(&company)
        db.Model(&user).Association("company").Find(&company)
    

    使用Related和Association都可以查询出来关联的company的数据.那他们的差异是什么呢?### 题目描述



    二者区别在于谁主谁从
    下述代码中user表是源,company关联源中的字段名,简而言之通过先查user-->commpany 最终的主表记录从user出发

        db.Model(&user).Association("company").Find(&company)
    

    而Related方法其内的company表是要查主表源,主查company表user实例只是条件填充对象

    db.Model(&user).Related(&company)
    //// SELECT * FROM company WHERE user_id = 1; // 1 is user's primary key
    

    开启sql打印一目了然

    // 启用Logger,显示详细日志
    db.LogMode(true)
  • 相关阅读:
    有限元矩形单元一阶拉格朗日插值函数流程
    有限元二阶拉格朗日插值函数理论
    MATLAB有限元二维编程(三角单元)
    【项目管理】项目经理每天、每周、每月应该做的都在这
    【项目管理】中小公司PMO不一样期间的责任
    【项目管理】PRINCE2常见问答
    如何用几句话概括PRINCE2学习?
    项目管理——收益管理
    【项目管理】项目管理发展的新阶段——PRINCE2项目管理方法
    【MSP是什么】最佳管理实践指南
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/16194234.html
Copyright © 2020-2023  润新知