所属
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 { |