has many 与另一个模型建立了一对多的连接。 不同于 has one,拥有者可以有零或多个关联模型。
例如,您的应用包含 user 和 credit card 模型,且每个 user 可以有多张 credit card。
- 定义model
// User 有多张 CreditCard,UserID 是外键
type User struct {
gorm.Model
Name string
CreditCard []CreditCard `gorm:"foreignKey:UserID"` // 使用 UserName 作为外键
}
type CreditCard struct {
gorm.Model
Number string
UserID uint //存储user表的主键id
}
- 建表以及数据插入
package mysqltest
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
var db *gorm.DB
func Initdb() {
dsn := "ellis:ellis@tcp(192.168.214.134:3306)/go_db?charset=utf8mb4&parseTime=True&loc=Local"
var err error
db, 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 main
import (
"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})
}