Orders []Order
解析成字段,更不会自动创建外键(这里可以使用gorm的 标签 来实现更高级的数据库 *** 作),现在想想还是很便捷的。
`源自官网示例`
type User struct {
Id int
Username string
Orders []Order
}
type Order struct {
Id int
UserID uint
Price float64
}
初始化表 & 创建数据
func main() {
// 数据库连接
dsn := "root:123456@(127.0.0.1:3306)/CSDN?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
// 初始化表
_ = db.AutoMigrate(User{}, Order{})
// 创建数据
_ = CreatUser(db)
_ = CreatOrder(db)
}
func CreatUser(db *gorm.DB) (err error) {
err = db.Create(&[]User{
{Username: "little_A"},
{Username: "little_B"},
{Username: "little_C"},
{Username: "little_D"},
}).Error
return
}
func CreatOrder(db *gorm.DB) (err error) {
err = db.Create(&[]Order{
{UserID: 1, Price: 1},
{UserID: 1, Price: 2},
{UserID: 1, Price: 3},
{UserID: 1, Price: 4},
{UserID: 2, Price: 5},
{UserID: 2, Price: 6},
{UserID: 2, Price: 7},
{UserID: 3, Price: 8},
{UserID: 3, Price: 9},
{UserID: 4, Price: 10},
}).Error
return
}
可视化查看一下
Preload()
方法。
在main函数中加入并执行
var a []User
db.Preload("Orders").Find(&a)
fmt.Println(a)
控制台输出
可以看到我们是对Users表的查询,Orders表的预加载,一对多的关系一目了然。
后记
本文是博主在处理MySQL一对多关联的理解,当然本文内容是相对基础的,读者们可以根据自己的需求解锁更多高级用法,以上。
感谢阅读。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)