首页 > 解决方案 > 努力手动创建与 gorm / migrate 的关系

问题描述

我有一个这样的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有很多Tags?这就是我目前的明智做法:

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。

标签: postgresqlgogo-gorm

解决方案


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

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

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


推荐阅读