Пытаться вручную создать отношения с gorm / migrate - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть 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? Это то, что у меня сейчас go -wise:

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.

1 Ответ

1 голос
/ 15 февраля 2020

Чтобы определить множество связей, должен существовать внешний ключ.

Поэтому для вашего случая тег должен быть:

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

...