所属
belongs to
アソシエーションは、別のモデルとの一対一の接続を設定します。宣言モデルの各インスタンスは、別のモデルの1つのインスタンスに「属します」。
たとえば、アプリケーションにユーザーと企業が含まれており、各ユーザーを正確に1つの企業に割り当てることができる場合、次の型はそれらの関係を表します。ここで注目すべきは、User
オブジェクトにはCompanyID
とCompany
の両方があることです。デフォルトでは、CompanyID
は暗黙的にUser
とCompany
テーブル間の外部キー関係を作成するために使用され、そのためCompany
内部構造体を埋めるためにUser
構造体には含める必要があります。
// `User` belongs to `Company`, `CompanyID` is the foreign key |
内部構造体の設定の詳細については、「Eager Loading」を参照してください。
外部キーのオーバーライド
belongs to関係を定義するには、外部キーが存在する必要があります。デフォルトの外部キーは、所有者の型名とその主キーフィールド名を使用します。
上記の例では、Company
に属するUser
モデルを定義するために、慣例により外部キーはCompanyID
である必要があります。
GORMは、外部キーをカスタマイズする方法を提供します。たとえば、
type User struct { |
参照のオーバーライド
belongs to関係では、GORMは通常、所有者の主キーフィールドを外部キーの値として使用します。上記の例では、Company
のフィールドID
です。
ユーザーを企業に割り当てると、GORMは企業のID
をユーザーのCompanyID
フィールドに保存します。
タグreferences
を使用して変更できます。例:
type User struct { |
注意 外部キー名が既に所有者の型に存在する場合、GORMは通常関係を
has one
として推測します。belongs to
関係ではreferences
を指定する必要があります。
type User struct { |
belongs toを用いたCRUD
belongs to関係の使用方法については、「関連付けモード」をご覧ください。
Eager Loading
GORMは、Preload
またはJoins
を使用してbelongs to関連付けの eager loading を許可します。詳細については、「プリロード(Eager loading)」を参照してください。
外部キー制約
タグconstraint
を使用してOnUpdate
、OnDelete
制約を設定できます。GORMでマイグレーションする際に作成されます。例:
type User struct { |