当先锋百科网

首页 1 2 3 4 5 6 7

has many 与另一个模型建立了一对多的连接。 不同于 has one,拥有者可以有零或多个关联模型。

例如,您的应用包含 user 和 credit card 模型,且每个 user 可以有多张 credit card。

  1. 定义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
}

  1. 建表以及数据插入
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})
}

https://gorm.io/zh_CN/docs/has_many.html