Belongs To
belongs to
アソシエーションは、モデルの各インスタンスが他のモデルの1つのインスタンスに “属する “ように、他のモデルとの1対1の接続を設定します。
たとえばユーザと会社が存在するアプリケーションがあり、各ユーザは1つの会社に所属する場合、以下のモデル定義はその関係性を表します。 ここで注意が必要なのは、 User
オブジェクトには、 CompanyID
と Company
の両方がある点です。 デフォルトでは、 CompanyID
は User
と Company
間の外部キーを使った関連の作成に暗黙的に使われます。従って、Company
の情報を埋めるためにCompanyID は User
に含まれる必要があります。
// `User`は`Company`に属します。 `CompanyID`は外部キーです。 |
構造体内部にある別の構造体の読み込みの詳細については、 Eager Loading を参照してください。
外部キーのデフォルト設定を上書きする
Belongs to リレーションを定義するには、外部キーが存在する必要があります。デフォルトの外部キーでは、所有する側にあるモデルの型名とそのモデルの主キーのフィールド名を使用します。
上記の例では、Company
に属する User
モデルを定義する際、規約に従い、外部キーを CompanyID
としています。
GORMは外部キーをカスタマイズする方法を提供しています。例:
type User struct { |
参照フィールドのデフォルト設定を上書きする
Belongs to リレーションにおいて、GORMは通常、所有する側にあるモデルの主キーをリレーションの外部キーの値として使用します。 上記の例では Company
の ID
がそれに該当します。
UserをCompanyに割り当てた場合、GORMはCompanyの ID
をUserの CompanyID
フィールドに保存します。
references
タグを設定することで、対象となるフィールドを変更することができます。
type User struct { |
NOTE GORM usually guess the relationship as
has one
if override foreign key name already exists in owner’s type, we need to specifyreferences
in thebelongs to
relationship.
type User struct { |
Belongs ToリレーションでのCRUD処理
Belongs toリレーションを使った処理の詳細については Association Mode を参照してください。
Eager Loading
GORMでは、 Preload
または Joins
を使うことで、belongs toリレーションの Eager Loadingを行うことができます。詳細については Preload (Eager loading) を参照してください。
外部キー制約
constraint
タグを使用することで、 OnUpdate
, OnDelete
の制約を掛けることができます。指定した制約はGORMを使ったマイグレーション実行時に作成されます。例:
type User struct { |