【问题标题】:How can I create a recursive association using GORM?如何使用 GORM 创建递归关联?
【发布时间】:2018-02-08 06:01:04
【问题描述】:

问题:如何使用GORM 创建递归关联?

上下文:我有一个可以手动和自动定义的设备。我想将手动设备与自动定义的设备相关联。 所以我决定为这个 many2many 关联创建一个表。

CREATE TABLE `equipment` (
  `equipment_id` int(11) NOT NULL,
  `manage_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `equipment`
  ADD PRIMARY KEY (`equipment_id`),
  ADD UNIQUE KEY `unique_equipment` (`model_id`,`manage_ip`);

CREATE TABLE `manual_auto` (
  `manual_id` int(11) NOT NULL,
  `auto_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `manual_auto`
  ADD PRIMARY KEY (`manual_id`,`auto_id`),
  ADD KEY `FK_AUTO` (`auto_id`);

ALTER TABLE `manual_auto`
  ADD CONSTRAINT `FK_AUTO` FOREIGN KEY (`auto_id`) REFERENCES `equipment` (`equipment_id`),
  ADD CONSTRAINT `FK_MANUAL` FOREIGN KEY (`manual_id`) REFERENCES `equipment` (`equipment_id`);

我知道我可以使用gorm:"many2many:manual_auto" 创建一个many2many 关联表。 有关与 GORM 关联的更多信息:http://jinzhu.me/gorm/associations.html#belongs-to

type Equipment struct {
    ID        uint
    Ip        string
    Equipment Equipment `gorm:"many2many:manual_auto"`
}

提前谢谢你。

编辑:有关上下文的更多信息

我想要一个设备的两个版本,一个将通过获取另一个数据库来自动创建。那么如果有用户对设备的描述进行了修改,我想要这个设备的2个版本,“manual_equipement”和“automatic_equipment”。

【问题讨论】:

  • “递归”是正确的术语吗?
  • @RickJames 绝对是的,也许在英语中还有另一个词,但这里有一个例子:tomjewett.com/dbdesign/dbdesign.php?page=recursive.php
  • 哦,用 SQL 术语来说,就是“分层”。经理-员工的例子是 1:Many,not many:many。注意这个parent_id 链接。诚然,“矩阵”组织导致了对多:多的需求。
  • 因为我没有“手动设备”和“自动设备”的概念,所以我很难理解问题空间。
  • @RickJames 编辑了问题,希望更清楚

标签: mysql database go many-to-many go-gorm


【解决方案1】:

当它是“多”时,你需要一个数组/切片:

type Equipment struct {
    ID        uint
    Ip        string
    Equipment []Equipment `gorm:"many2many:manual_auto"`
}

您手动创建的架构的名称也与结构中的名称不匹配。或者你可以使用db.AutoMigrate或者在gorm标签中定义列名:

type Equipment struct {
    ID        uint        `gorm:"column:equipment_id"`
    Ip        string      `gorm:"column:manage_ip"`
    Equipment []Equipment `gorm:"many2many:manual_auto"`
}

【讨论】:

  • 如何区分手动设备和自动设备?我必须在结构中添加类型吗?
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2018-02-03
  • 2020-11-15
  • 1970-01-01
  • 2020-04-24
  • 2020-01-15
  • 2015-01-19
相关资源
最近更新 更多