登录
首页 >  Golang >  Go问答

手动管理 gorm 和 migrate 之间的关系

来源:stackoverflow

时间:2024-03-21 08:03:28 317浏览 收藏

对于手动管理 GORM 和 Migrate 之间的关系,需要在数据库表中建立外键。对于给定的 SQL 结构,`tags` 表应包含 `resourceid` 列作为外键,而 `Resource` 模型应将 `Tags` 关系定义为 `foreignkey:ResourceID`。通过这种方式,可以手动管理关系,同时仍然使用 GORM 进行对象映射和查询。有关更多详细信息,请参考 GORM 文档。

问题内容

我有一个像这样的sql结构:

create table resources (
  id serial primary key,
  title text not null,
  created_at timestamptz not null,
  updated_at timestamptz not null,
  deleted_at timestamptz
);

create table tags (
    name text primary key
);

我需要写什么sql,如何告诉gorm我想要一个resource有很多tag?这就是我目前所掌握的:

package models

import (
    "github.com/jinzhu/gorm"
)

type Tag struct {
    Name string `gorm:"PRIMARY_KEY"`
}

type Resource struct {
    gorm.Model
    Title       string
    Tags        []Tag        `gorm:""`
}

请注意,我明确不想希望通过 gorm 自动迁移。我正在使用 migrate 工具来处理迁移,并且希望专门手动处理它们,而不是使用 go。


解决方案


要定义多关系,必须存在外键。

所以对于你的情况标签应该是:

type tag struct {
    gorm.model
    name string `gorm:"primary_key"`
    resourceid int
}

和资源:

type Resource struct {
    gorm.Model
    Title       string
    Tags        []Tag        `gorm:"foreignkey:ResourceID"`
}

并且您的 sql 结构应该具有外键 resourceid 列。

不确定您是否已经检查过此内容,但它包含更多详细信息以备您需要:https://gorm.io/docs/has_many.html#Foreign-Key

理论要掌握,实操不能落!以上关于《手动管理 gorm 和 migrate 之间的关系》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>