has many 与另一个模型建立了一对多的连接。 不同于 has one,拥有者可以有零或多个关联模型。
例如,您的应用包含 user 和 credit card 模型,且每个 user 可以有多张 credit card。
- 定义model
// User 有多张 CreditCard,UserID 是外键
type User struct {gorm.ModelName stringCreditCard []CreditCard `gorm:"foreignKey:UserID"` // 使用 UserName 作为外键
}type CreditCard struct {gorm.ModelNumber stringUserID uint //存储user表的主键id
}
- 建表以及数据插入
package mysqltestimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/clause"
)var db *gorm.DBfunc Initdb() {dsn := "ellis:ellis@tcp(192.168.214.134:3306)/go_db?charset=utf8mb4&parseTime=True&loc=Local"var err errordb, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic(err)}
}func Create(value interface{}) {d := db.Create(value)fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
}func InitTable() {db.AutoMigrate(&User{}, &CreditCard{})
}package mainimport ("ellis/mysqltest"
)func main() {mysqltest.Initdb()// // 创建数据库mysqltest.InitTable()var value []mysqltest.CreditCard = []mysqltest.CreditCard{{Number: "123"}, {Number: "234"}}mysqltest.Create(&mysqltest.User{Name: "ellis", CreditCard: value})
}
https://gorm.io/zh_CN/docs/has_many.html