github.com/gogf/gf@v1.16.9/.example/database/gdb/mysql/gdb_with_insert.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "github.com/gogf/gf/database/gdb" 6 "github.com/gogf/gf/frame/g" 7 "github.com/gogf/gf/util/gmeta" 8 ) 9 10 func main() { 11 type UserDetail struct { 12 gmeta.Meta `orm:"table:user_detail"` 13 Uid int `json:"uid"` 14 Address string `json:"address"` 15 } 16 17 type UserScore struct { 18 gmeta.Meta `orm:"table:user_score"` 19 Id int `json:"id"` 20 Uid int `json:"uid"` 21 Score int `json:"score"` 22 } 23 24 type User struct { 25 gmeta.Meta `orm:"table:user"` 26 Id int `json:"id"` 27 Name string `json:"name"` 28 UserDetail *UserDetail `orm:"with:uid=id"` 29 UserScores []*UserScore `orm:"with:uid=id"` 30 } 31 32 db := g.DB() 33 db.Transaction(func(tx *gdb.TX) error { 34 for i := 1; i <= 5; i++ { 35 // User. 36 user := User{ 37 Name: fmt.Sprintf(`name_%d`, i), 38 } 39 lastInsertId, err := db.Model(user).Data(user).OmitEmpty().InsertAndGetId() 40 if err != nil { 41 return err 42 } 43 // Detail. 44 userDetail := UserDetail{ 45 Uid: int(lastInsertId), 46 Address: fmt.Sprintf(`address_%d`, lastInsertId), 47 } 48 _, err = db.Model(userDetail).Data(userDetail).OmitEmpty().Insert() 49 if err != nil { 50 return err 51 } 52 // Scores. 53 for j := 1; j <= 5; j++ { 54 userScore := UserScore{ 55 Uid: int(lastInsertId), 56 Score: j, 57 } 58 _, err = db.Model(userScore).Data(userScore).OmitEmpty().Insert() 59 if err != nil { 60 return err 61 } 62 } 63 } 64 return nil 65 }) 66 }