hasmany
創(chuàng)建表并插入數(shù)據(jù)
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Card struct {
ID uint
UserID uint
Name string
}
type User struct {
ID uint
Name string
Cards []Card
}
func main() {
dsn := "root:He200203@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("err", err)
}
c1 := Card{
Name: "card1",
}
c2 := Card{
Name: "card2",
}
u1 := User{
Name: "user1",
Cards: []Card{
c1, c2,
},
}
db.AutoMigrate(&User{}, &Card{})
db.Create(&u1)
}
查詢操作
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Card struct {
ID uint
UserID uint
Name string
}
type User struct {
ID uint
Name string
Cards []Card
}
func main() {
dsn := "root:He200203@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("err", err)
}
var uu User
db.Preload("Cards").First(&uu)
fmt.Println(uu)
}
{1 user1 [{1 1 card1} {2 1 card2}]}
帶條件的查詢
var uu User
db.Preload("Cards", func(db *gorm.DB) *gorm.DB {
return db.Where("name=?", "card1")
}).First(&uu)
fmt.Println(uu)
var uu User
db.Preload("Cards", "name=?", "card1").First(&uu)
fmt.Println(uu)
{1 user1 [{1 1 card1}]}
多級嵌套
結(jié)構(gòu)體定義
type Info struct {
ID uint
Money uint
CardID uint
}
type Card struct {
ID uint
UserID uint
Name string
Info Info
}
type User struct {
ID uint
Name string
C
Cards []Card
}
查詢
var uu User
db.Preload("Cards.Info").Preload("Cards").First(uu)
fmt.Println(uu)
或者
var uu User
db.Preload("Cards.Info").First(uu)
fmt.Println(uu)
帶條件的查詢
var uu User
db.Preload("Cards.Info").Preload("Cards","name=?","card1").First(uu)
fmt.Println(uu)
db.Preload("Cards", func(db *gorm.DB) *gorm.DB {
return db.Joins("Info").Where("money>1000")
})