gorm 关联

作者: adm 分类: go 发布时间: 2022-04-01
ExportComposeOrderGoods []ExportComposeOrderGoods `json:"exportComposeOrderGoods" gorm:"ForeignKey:OrderNo;references:OrderNo;AssociationForeignKey:OrderNo"`
`gorm:"foreignKey:关联表的结构体字段;references:当前表的结构体字段;`

模型

flame/gorm/model/user.go

package model

import (
"github.com/jinzhu/gorm"
"time"
)

type User struct {
gorm.Model
Name string
Age uint
Birthday *time.Time //数据库字段值可以为NULL 时得使用指针,否则可以不用指针
Email string

CreditCard *CreditCard   //避免循环嵌套,使用指针形式
//has one 模型
//不填foreignkey,默认就是【此字段type】【CreditCard】+primarykey【ID】 为【CreditCardID】
//不填association_foreignkey,默认就是【此字段type】【User】的 primarykey【ID】,
//即`gorm:"foreignkey:CreditCardID;association_foreignkey:ID"`
CreditCardID uint
//为foreignkey,在本struct内 ,指向拥有哪个信用卡
//foreignkey【CreditCard】.【CreditCardID】———————>association_foreignkey【CreditCard】.【ID】

Phones []Phone `gorm:"foreignkey:UserID"`
//has many 模型 必须要配置foreignkey
//不填association_foreignkey,默认就是【此struct】【User】的 primarykey【ID】,
//即`gorm:"foreignkey:UserID;association_foreignkey:ID"`
//association_foreignkey【User】.【ID】———————>foreignkey【Phone】.【UserID】

Languages []Language `gorm:"many2many:user_language;"`
//many to many 模型 必须要配置many2many
//关联表为user_language
//不填foreignkey,默认就是【此struct】【User】的 primarykey【ID】
//不填association_foreignkey,默认就是【此字段type】【Language】的 primarykey【ID】
//不填jointable_foreignkey,默认就是【此struct】【User】+primarykey【ID】 为【UserID】 转换成【user_id】
//不填association_jointable_foreignkey,默认就是【此字段type】【Language】+primarykey【ID】 为【LanguageID】 转换成【language_id】
//foreignkey【User】.【ID】———————>jointable_foreignkey【user_language】.【user_id】
//association_jointable_foreignkey【user_language】.【language_id】———————>不填association_foreignkey【Language】.【I】

//多对多 存在循环时使用指针,否则可以不用指针,避免循环嵌套
}
flame/gorm/model/creditCard.go

package model

import (
"github.com/jinzhu/gorm"
)

type CreditCard struct {
gorm.Model
Number string

User *User    //避免循环嵌套,使用指针形式
//belong to模型
//不填foreignkey,默认就是【此字段type】【User】+primarykey【ID】 为【UserID】
//不填association_foreignkey,默认就是此字段type【User】的 primarykey【ID】,
//即`gorm:"foreignkey:UserID;association_foreignkey:ID"`
UserID int
//为foreignkey, 在本struct内 ,指向归属哪个User
//foreignkey【CreditCard】.【UserID】———————>association_foreignkey【User】.【ID】

}
flame/gorm/model/phone.go

package model

import (
"github.com/jinzhu/gorm"
)

type Phone struct {
gorm.Model
Number string

User User
//belong to模型
//不填foreignkey,默认就是此字段type【User】+primarykey【ID】 为【UserID】
//不填association_foreignkey,默认就是此字段type【User】的 primarykey【ID】,
//即`gorm:"foreignkey:UserID;association_foreignkey:ID"`
UserID int
//为foreignkey, 在本struct内 ,指向归属哪个User
//foreignkey【CreditCard】.【UserID】———————>association_foreignkey【User】.【ID】

}

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!