GORM Belongs To 和 Has One
在 GORM 中,Belongs To
和 Has One
是两种不同的关系类型,用于表示模型之间的关联。它们之间的区别如下:
Belongs To
:
-
关系方向:
Belongs To
关系表示一个模型属于另一个模型。这意味着一个模型(子模型)包含一个外键字段,指向另一个模型(父模型)的主键。 -
外键位置:在
Belongs To
关系中,外键位于子模型中,指向父模型的主键。 -
示例:假设
Order
模型和User
模型之间有Belongs To
关系。在这种情况下,Order
模型将包含一个UserID
外键字段,指向User
模型的ID
字段。type Order struct { ID uint UserID uint // 外键,指向 User 模型的 ID User User // 关系 Amount float64 } type User struct { ID uint Name string }
Has One
:
-
关系方向:
Has One
关系表示一个模型拥有另一个模型。这意味着一个模型(父模型)拥有一个与之关联的另一个模型(子模型)。 -
外键位置:在
Has One
关系中,外键位于子模型中,指向父模型的主键。 -
示例:假设
User
模型和Profile
模型之间有Has One
关系。在这种情况下,Profile
模型将包含一个UserID
外键字段,指向User
模型的ID
字段。type User struct { ID uint Name string Profile Profile `gorm:"foreignKey:UserID"` // 关系 } type Profile struct { ID uint UserID uint // 外键,指向 User 模型的 ID Age int }
Belongs To
和 Has One
的区别主要在于关系的方向和外键的位置。在 Belongs To
关系中,子模型包含外键,指向父模型的主键。而在 Has One
关系中,父模型通过关联的子模型拥有一个与之关联的模型。