屬於

屬於

屬於關聯設定與另一個模型的一對一連線,宣告模型的每個實例「屬於」另一個模型的一個實例。

例如,如果您的應用程式包含使用者和公司,且每個使用者可以指定到一家公司,下列類型表示該關係。請注意,在 使用者 物件中,同時有 公司 ID公司。預設情況下,公司 ID 會隱含地用於在 使用者公司 表格之間建立外來金鑰關係,因此必須包含在 使用者 結構中,才能填入 公司 內部結構。

// `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
}

請參閱 急切載入,以取得關於填充內部結構的詳細資訊。

覆寫外來金鑰

若要定義屬於關係,外來金鑰必須存在,預設外來金鑰使用擁有者的類型名稱加上其主要欄位名稱。

對於上述範例,若要定義屬於 公司使用者 模型,外來金鑰應依慣例為 公司 ID

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
}

覆寫參考

對於屬於關係,GORM 通常使用擁有者的主要欄位作為外來金鑰的值,對於上述範例,它是 公司 的欄位 ID

當您將使用者指定到公司時,GORM 會將公司的 ID 儲存到使用者的 公司 ID 欄位中。

你可以使用標籤 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 允許使用 PreloadJoins eager loading 屬於關聯,請參閱 預載入 (Eager loading) 以取得詳細資訊

FOREIGN KEY 約束

你可以使用標籤 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
}

白金贊助商

金牌贊助商

白金贊助商

金牌贊助商