Принадлежит к (Belongs To)
Отношение belongs to
устанавливает связь один к одному с другой моделью, таким образом, чтобы каждый экземпляр объявленной модели “принадлежал” одному экземпляру другой модели.
Например, если в вашем приложении есть пользователи и компании, и каждый пользователь может быть только в одной компании, то следующие типы отражают это отношение. Обратите внимание, что у объекта User
есть CompanyID
и Company
. По умолчанию, CompanyID
неявно используется для создания отношения внешнего ключа между таблицами User
и Company
, и поэтому должен быть включен в структуру User
для заполнения внутренней структуры Company
.
// `User` принадлежит к `Company`, `CompanyID` это внешний ключ |
Подробнее о заполнении внутренней структуры см. в Нетерпеливая загрузка.
Переопределение внешнего ключа
Чтобы определить отношение “belongs to”, внешний ключ должен существовать, внешний ключ по умолчанию использует имя типа владельца плюс имя его первичного поля.
Для приведенного выше примера, чтобы определить модель User
, которая принадлежит Company
, внешний ключ должен быть CompanyID
по соглашению
GORM предоставляет возможность настраивать внешний ключ, например:
type User struct { |
Переопределить ссылки
Для отношения belongs to GORM обычно использует первичное поле владельца в качестве значения внешнего ключа, в приведенном выше примере это поле Company
ID
.
Когда вы назначаете пользователя в компанию, GORM сохраняет ID
компании в поле CompanyID
пользователя.
Вы можете изменить это с помощью тега references
, например:
type User struct { |
ПРИМЕЧАНИЕ GORM обычно определяет связь, как
has one
если переопределяемое имя внешнего ключа уже существует в типе владельца, нам нужно указать тегreferences
сназванием ключа
.
type User struct { |
CRUD с Belongs To
Пожалуйста, проверьте Режим ассоциации для работы с отношениями “belongs to”
Жадная загрузка
GORM разрешает жадную загрузку, относящуюся к ассоциациям с предварительной загрузкой (preload)
или объединениями (joins)
, смотрите Предварительная загрузка (Жадная загрузка) для получения подробной информации
Ограничения внешних ключей
Вы можете настроить ограничения onUpdate
, OnDelete
с помощью тега constraint
, он будет создан при миграции с помощью GORM, например:
type User struct { |