继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

gorm 一对一 一对多 例子

holdtom
关注TA
已关注
手记 1853
粉丝 240
获赞 991


gorm 一对一 一对多 例子

数据库sql

CREATE TABLE `allin_asset` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `instance_id` varchar(255) DEFAULT '' COMMENT '实例ID',

  `instance_name` varchar(255) DEFAULT '' COMMENT '标签',

  `host_name` varchar(255) DEFAULT '' COMMENT '系统名字',

  `zone` varchar(255) DEFAULT '' COMMENT '可用区',

  `business_id` varchar(255) DEFAULT '' COMMENT '产品线',

  `private_ip` varchar(255) DEFAULT '' COMMENT '内网IP',

  `public_ip` varchar(255) DEFAULT '' COMMENT '外网IP',

  `os_name` varchar(255) DEFAULT '' COMMENT '系统版本',

  `cpu` int(11) unsigned  DEFAULT NULL COMMENT 'CPU',

  `memory` int(11) unsigned  DEFAULT NULL COMMENT '内存',

  `created_on` int(11) unsigned DEFAULT NULL COMMENT '创建时间',

  `modified_on` int(11) unsigned DEFAULT NULL COMMENT '更新时间',

  `expired_on` int(11) unsigned DEFAULT NULL COMMENT '过期时间',

  `status`  varchar(255) DEFAULT '' COMMENT '运行状态',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='资产管理';

CREATE TABLE `allin_business` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(255)  COMMENT '产品线名字',

  `created_on` int(11) unsigned DEFAULT NULL COMMENT '创建时间',

  `modified_on` int(11) unsigned DEFAULT NULL COMMENT '更新时间',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品线管理';

CREATE TABLE `allin_module` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(255)  COMMENT '模块名字',

  `created_on` int(11) unsigned DEFAULT NULL COMMENT '创建时间',

  `modified_on` int(11) unsigned DEFAULT NULL COMMENT '更新时间',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模块管理';

CREATE TABLE `allin_asset_module` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `asset_id` int(11) unsigned DEFAULT NULL COMMENT '资产ID',

  `module_id` int(11) unsigned DEFAULT NULL COMMENT '组ID',

  `created_on` int(11) unsigned DEFAULT NULL COMMENT '创建时间',

  `modified_on` int(11) unsigned DEFAULT NULL COMMENT '更新时间',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='资产_模块_管理';

表结构

type Business struct {

    Model

    Name string `json:"name"`

}

type Module struct {

    Model

    Name string `json:"name"`

}

type Asset struct {

    Model

    InstanceId   string        `json:"instance_id"`

    InstanceName string        `json:"instance_name"`

    HostName     string        `json:"host_name"`

    Zone         string        `json:"zone"`

    PrivateIp    string        `json:"private_ip"`

    PublicIp     string        `json:"public_ip"`

    OsName       string        `json:"os_name"`

    Cpu          int           `json:"cpu"`

    Memory       int           `json:"memory"`

    ExpiredOn    int           `json:"expired_on"`

    Status       string        `json:"status"`

    BusinessId   int           `json:"business_id" gorm:"index"`

    Business     Business      `json:"business"`     // 产品线   一对一

    Module       []Module `json:"module" gorm:"many2many:asset_module;"`   // 模块  多对多

}

func GetAsset(id int) (asset Asset) {

    db.Where("id = ?", id).First(&asset)

    db.Model(&asset).Related(&asset.Business).Related(&asset.Module, "module")

    return

}

函数

func GetAsset(id int) (asset Asset) {

    db.Where("id = ?", id).First(&asset)

    db.Model(&asset).Related(&asset.Business).Related(&asset.Module, "Module")

    return

}

func GetAssets(pageNum int, pageSize int, maps interface{}) (assets []Asset) {

    db.Preload("Business",).Preload("Module",).Where(maps).Offset(pageNum).Limit(pageSize).Find(&assets)

    return

}

func AddAsset(data map[string]interface{}, modules []int ) bool {

    asset := &Asset{

        InstanceId:   data["instance_id"].(string),

        InstanceName: data["instance_name"].(string),

        HostName:     data["host_name"].(string),

        Zone:         data["zone"].(string),

        BusinessId:   data["business_id"].(int),

        PrivateIp:    data["private_ip"].(string),

        PublicIp:     data["public_ip"].(string),

        OsName:       data["os_name"].(string),

        Cpu:          data["cpu"].(int),

        Memory:       data["memory"].(int),

        ExpiredOn:    data["expired_on"].(int),

        Status:       data["status"].(string),

    }

    module := []Module{}

    db.Where("id in (?)", modules).Find(&module)

    db.Create(&asset).Association("Module").Append(module)  //.Delete   .Replace  .Clear() .Count()

    return true

}

func ExistAssetByID(id int) bool {

    var asset Asset

    db.Select("id").Where("id = ?", id).First(&asset)

    if asset.ID > 0 {

        return true

    }

    return false

}

func DeleteAsset(id int) bool {

    asset := Asset{}

    db.Where("id = ?", id).Find(&asset)

    db.Model(&asset).Association("Module").Clear()

    db.Where("id = ?", id).Delete(asset)

    return true

}

func EditAsset(id int, data interface{},modules []int) bool {

    module := []Module{}

    db.Where("id in (?)", modules).Find(&module)

    asset := Asset{}

    db.Where("id = ?", id).Find(&asset)

    db.Model(&asset).Association("Module").Replace(module)

    db.Model(&asset).Updates(data)

    return true

}

©著作权归作者所有:来自51CTO博客作者295631788的原创作品,如需转载,请注明出处,否则将追究法律责任


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP