gorm не устанавливает отношения внешних ключей в схеме базы данных - PullRequest
1 голос
/ 21 марта 2020

У меня есть следующие 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 (которая существует)

Почему это так?

1 Ответ

2 голосов
/ 22 марта 2020

Чтобы установить отношение один к одному, вам также необходимо добавить поле id в struct. По умолчанию вы должны назвать его как [YourFieldName]ID, если вы хотите использовать какое-то другое имя для поля идентификатора, вы можете сделать это с помощью тега (см. документы для более подробной информации ), например:

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

Но будьте осторожны, AutoMigrate не может создать ограничение внешнего ключа ( здесь связанная проблема ). Вы должны установить его самостоятельно с помощью AddForeignKey метода .

...