数据库未在数据库架构中建立外键关系商店

问题描述 投票:0回答:1

我有以下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 gorm
1个回答
0
投票

要设置一对一关系,您还需要向结构体添加id字段。默认情况下,您应该将其命名为[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自行设置。

© www.soinside.com 2019 - 2024. All rights reserved.