gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:11:22 25 4
gpt4 key购买 nike

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

最佳答案

当它是“很多”时,那么你需要一个数组/slice :

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"`
}

关于mysql - 如何使用 GORM 创建递归关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45961815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com