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

时间:2017-08-30 13:29:45

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

问题:如何使用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"。

1 个答案:

答案 0 :(得分:1)

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

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

手动创建的模式的名称也与struct的名称不匹配。或者您可以使用db.AutoMigrate或在gorm标记中定义列名称:

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