所属

所属

belongs to アソシエーションは、別のモデルとの一対一の接続を設定します。宣言モデルの各インスタンスは、別のモデルの1つのインスタンスに「属します」。

たとえば、アプリケーションにユーザーと企業が含まれており、各ユーザーを正確に1つの企業に割り当てることができる場合、次の型はそれらの関係を表します。ここで注目すべきは、UserオブジェクトにはCompanyIDCompanyの両方があることです。デフォルトでは、CompanyIDは暗黙的にUserCompanyテーブル間の外部キー関係を作成するために使用され、そのためCompany内部構造体を埋めるためにUser構造体には含める必要があります。

// `User` belongs to `Company`, `CompanyID` is the foreign key
type User struct {
gorm.Model
Name string
CompanyID int
Company Company
}

type Company struct {
ID int
Name string
}

内部構造体の設定の詳細については、「Eager Loading」を参照してください。

外部キーのオーバーライド

belongs to関係を定義するには、外部キーが存在する必要があります。デフォルトの外部キーは、所有者の型名とその主キーフィールド名を使用します。

上記の例では、Companyに属するUserモデルを定義するために、慣例により外部キーはCompanyIDである必要があります。

GORMは、外部キーをカスタマイズする方法を提供します。たとえば、

type User struct {
gorm.Model
Name string
CompanyRefer int
Company Company `gorm:"foreignKey:CompanyRefer"`
// use CompanyRefer as foreign key
}

type Company struct {
ID int
Name string
}

参照のオーバーライド

belongs to関係では、GORMは通常、所有者の主キーフィールドを外部キーの値として使用します。上記の例では、CompanyのフィールドIDです。

ユーザーを企業に割り当てると、GORMは企業のIDをユーザーのCompanyIDフィールドに保存します。

タグreferencesを使用して変更できます。例:

type User struct {
gorm.Model
Name string
CompanyID string
Company Company `gorm:"references:Code"` // use Code as references
}

type Company struct {
ID int
Code string
Name string
}

注意 外部キー名が既に所有者の型に存在する場合、GORMは通常関係をhas oneとして推測します。belongs to関係ではreferencesを指定する必要があります。

type User struct {
gorm.Model
Name string
CompanyID string
Company Company `gorm:"references:CompanyID"` // use Company.CompanyID as references
}

type Company struct {
CompanyID int
Code string
Name string
}

belongs toを用いたCRUD

belongs to関係の使用方法については、「関連付けモード」をご覧ください。

Eager Loading

GORMは、PreloadまたはJoinsを使用してbelongs to関連付けの eager loading を許可します。詳細については、「プリロード(Eager loading)」を参照してください。

外部キー制約

タグconstraintを使用してOnUpdateOnDelete制約を設定できます。GORMでマイグレーションする際に作成されます。例:

type User struct {
gorm.Model
Name string
CompanyID int
Company Company `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}

type Company struct {
ID int
Name string
}

プラチナスポンサー

ゴールドスポンサー

プラチナスポンサー

ゴールドスポンサー