GORM не создает столбец ForeignKey - PullRequest
1 голос
/ 21 сентября 2019

Я пытаюсь установить связь между двумя моделями в базе данных PostgreSQL, используя Go и gorm.

Вот мой код, первая модель:

Trip.go

package model

import "github.com/jinzhu/gorm"

// Trip models
type Trip struct {
    gorm.Model
    TripName        string
    TripDescription string
}

Вторая модель:

TripKeyPoints.go

package model

import "github.com/jinzhu/gorm"

// TripKeyPoint models
type TripKeyPoint struct {
    gorm.Model
    KPName        string
    KPDescription string
    TripID        Trip
}

Часть кода из файла, который выполняет миграцию и инициализирует все

    db.DropTableIfExists(&User{}, &model.Trip{}, &model.TripKeyPoint{})
    db.AutoMigrate(&User{}, &model.Trip{}, &model.TripKeyPoint{})
    db.Model(&model.TripKeyPoint{}).AddForeignKey("trip_id", "trips(id)", "CASCADE", "CASCADE")

Пользовательские модели - это простоаддон, но я оставляю это в этом фрагменте.Из-за многих тестов я в начале отбрасываю таблицы.

Вот что я получаю, когда запускаю код:

?[35m(C:/golang_lab/golang-gorm-tutorial/users.go:36)?[0m
?[33m[2019-09-21 18:40:34]?[0m ?[31;1m pq: column "trip_id" referenced in foreign key constraint does not exist ?[0m

И да, это правда, когда я захожу в postgres в таблицеtrip_key_points нет столбца с внешним ключом.

Что мне нужно сделать, я хочу иметь один объект TRIP и затем назначить другие TripKeyPoints.

Есть идеи, почему?Или как заставить GORM создать этот столбец?

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Я явно определяю столбец внешнего ключа:

// TripKeyPoint models
type TripKeyPoint struct {
    gorm.Model
    KPName        string
    KPDescription string
    TripID        uint `gorm:"TYPE:integer REFERENCES trips"`
}
0 голосов
/ 21 сентября 2019

попробуйте отредактировать вашу структуру следующим образом:

// TripKeyPoint models
type TripKeyPoint struct {
    gorm.Model
    KPName        string
    KPDescription string
    TripID        Trip `gorm:"foreignkey:TripId"`
}
...