GORM不创建ForeignKey列

时间:2019-09-21 16:55:49

标签: postgresql go go-gorm

我正在尝试使用Go和gorm在PostgreSQL数据库上建立两个模型之间的关系。

这是我的代码,第一个模型:

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

是的,当我在表trip_key_points中登录postgres时,没有带有外键的列。

我需要做的是,我想要一个TRIP对象,然后分配其他TripKeyPoints。

有什么想法吗?还是我可以强制GORM创建此列?

2 个答案:

答案 0 :(得分:1)

我明确定义了外键列:

// TripKeyPoint models
type TripKeyPoint struct {
    gorm.Model
    KPName        string
    KPDescription string
    TripID        uint `gorm:"TYPE:integer REFERENCES trips"`
}

答案 1 :(得分:0)

尝试像这样编辑您的结构:

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