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  }