postgresql - 努力手动创建与 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
有很多Tag
s?这就是我目前的明智做法:
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
推荐阅读
- c - 在 fwrite() 上循环 fread() 与单独使用它们有什么区别?
- python-3.x - Python:当条件为真时添加键值对
- python-3.x - 使用通道在异步 Web 套接字使用者中测试协程功能
- laravel - OrderBy 与关系
- ios - XCFramework 与其他 3rd 方依赖项
- react-native - 导航和提交表单属性
- javascript - Shadow Dom 无法读取未定义的属性“样式”
- asp.net-core - ASP.NET Core 清除会话问题
- docker - Docker 服务运行但未绑定到主机端口给出 503 Service Unavailable
- c++ - 使用简单漫反射计算时的透明/嘈杂球体