添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
type User struct { // 继承gorm的基础Model,里面默认定义了ID、CreatedAt、UpdatedAt、DeletedAt 4个字段 gorm.Model CreditCards []CreditCard // 一对多关联属性,表示多张信用卡 // 信用卡 type CreditCard struct { gorm.Model Number string // 卡号 UserID uint // 默认外键, 用户Id

默认情况下,Gorm 使用持有关联属性的 类型名 + 主键ID 作为外键名。

如上例,User 使用 User + ID = UserID 作为外键名。

自定义外键:

type User struct {
gorm.Model
    // 通过标签,将外键定义为:UserRefer
    CreditCards []CreditCard `gorm:"foreignkey:UserRefer"`
type CreditCard struct {
    gorm.Model
    Number    string
    UserRefer uint // 新定义的外键名

外键和关联外键都是成对出现的,默认情况 Gorm 使用主键 ID,作为关联外键。

主键 ID,默认为 ID,如上面的例子,使用 User 的 ID 作为关联外键。

自定义关联外键:

type User struct {
gorm.Model
    MemberNumber string // 关联外键字段
    // 使用references定义关联外键名
    CreditCards  []CreditCard `gorm:"foreignkey:UserMemberNumber;references:MemberNumber"`
type CreditCard struct {
gorm.Model
    Number           string
    UserMemberNumber string // 外键字段

一对多关联查询

user := User{}
// 查询用户数据
//自动生成sql: SELECT * FROM `users`  WHERE (username = 'tizi365') LIMIT 1
db.Where("username = ?", "tizi365").First(&user)
fmt.Println(user)
//自动生成SQL: SELECT * FROM emails WHERE user_id = 111; // 111 是user的主键ID值
// 关联查询的结果,保存到user.CreditCard属性
db.Model(&user).Association("CreditCard").Find(&user.CreditCard)

Gorm 教程