猿问

gorm 未在数据库模式中建立外键关系

我有以下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(确实存在)


这是为什么?


开心每一天1111
浏览 125回答 1
1回答

米琪卡哇伊

要设置一对一关系,您还需要将 id 字段添加到结构中。默认情况下,您应该将其命名为[YourFieldName]ID,如果您想为 id 字段使用其他名称,您可以通过标签来完成,例如:type Week struct {    gorm.Model    Start    Day    End      Day `gorm:"foreignkey:EndRefer"`    StartID  uint    EndRefer uint}但要注意,AutoMigrate不能创建外键约束。
随时随地看视频慕课网APP

相关分类

Go
我要回答