【问题标题】:gorm not establishing foreign key relationshop in the database schemagorm 没有在数据库模式中建立外键关系
【发布时间】:2020-03-21 20:53:46
【问题描述】:

我有以下 2 个gorm 模型

// Day is a corresponding day entry
type Day struct {
    gorm.Model
    Dateday   string         `json:"dateday" gorm:"type:date;NOT NULL"`
    Nameday   string         `json:"nameday" gorm:"type:varchar(100);NOT NULL"`
    Something sql.NullString `json:"something"`
    Holyday   bool           `json:"holyday"`
}

type Week struct {
    gorm.Model
    Start Day
    End   Day
}

但是,在执行迁移之后

db.AutoMigrate(&Day{})
db.AutoMigrate(&Week{})

登录数据库并描述表weeks

postgres-# \d+ weeks;
                                                          Table "public.weeks"
   Column   |           Type           | Collation | Nullable |              Default              | Storage | Stats target | Description
------------+--------------------------+-----------+----------+-----------------------------------+---------+--------------+-------------
 id         | integer                  |           | not null | nextval('weeks_id_seq'::regclass) | plain   |              |
 created_at | timestamp with time zone |           |          |                                   | plain   |              |
 updated_at | timestamp with time zone |           |          |                                   | plain   |              |
 deleted_at | timestamp with time zone |           |          |                                   | plain   |              |
Indexes:
    "weeks_pkey" PRIMARY KEY, btree (id)
    "idx_weeks_deleted_at" btree (deleted_at)

我没有看到 start / end 字段,这应该也是 day 表的外键(确实存在)

这是为什么呢?

【问题讨论】:

    标签: go orm go-gorm


    【解决方案1】:

    要设置一对一的关系,您还需要将 id 字段添加到 struct。默认情况下你应该命名为[YourFieldName]ID,如果你想为id字段使用其他名称,你可以通过标签来实现(见docs for more details),例如:

    type Week struct {
        gorm.Model
        Start    Day
        End      Day `gorm:"foreignkey:EndRefer"`
        StartID  uint
        EndRefer uint
    }
    

    但请注意,AutoMigrate 无法创建外键约束 (here's related issue)。您必须使用AddForeignKey method 自行设置。

    【讨论】:

    • 谢谢。我看到这是一个长期存在的问题。作者表示在v2中解决了但是I don't know如何显式导入v2
    猜你喜欢
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2016-10-14
    • 2013-03-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    相关资源
    最近更新 更多