Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "database/sql"
- "fmt"
- "github.com/google/uuid"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- "gorm.io/gorm/clause"
- "log"
- "time"
- )
- type Model struct {
- ID uuid.UUID `gorm:"type:char(36);primary_key"`
- }
- // BeforeCreate will set a UUID rather than numeric ID.
- func (m *Model) BeforeCreate(tx *gorm.DB) (err error) {
- m.ID = uuid.New()
- return
- }
- type Foo struct {
- Model
- Name string `gorm:"type:varchar(45)"`
- Bars []*Bar `gorm:"many2many:foo_bar;"`
- }
- type Bar struct {
- Model
- Name string `gorm:"type:varchar(45)"`
- Foos []*Foo `gorm:"many2many:foo_bar;"`
- }
- func main() {
- db := provideDatabase()
- foos := map[string]*Foo{}
- for _, f := range []string{"a", "b", "c", "d", "e"} {
- id := uuid.New()
- foo := Foo{Model: Model{ID: id}, Name: f}
- db.Omit(clause.Associations).Create(&foo)
- foos[f] = &foo
- }
- for _, b := range []string{"z", "y", "x", "w", "v"} {
- bar := Bar{
- Model: Model{ID: uuid.New()},
- Name: b,
- Foos: []*Foo{
- foos["a"],
- foos["e"],
- },
- }
- db.Create(&bar)
- }
- }
- // create the database and truncate the tables
- func provideDatabase() *gorm.DB {
- log.Println("Connecting to database...")
- connectionString :=
- fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?parseTime=true",
- "root", "letmein", "127.0.0.1", 33070, "test")
- var err error
- sqlDB, err := sql.Open("mysql", connectionString)
- if err != nil {
- panic("Could not connect to database")
- }
- db, err := gorm.Open(mysql.New(mysql.Config{
- Conn: sqlDB,
- }), &gorm.Config{})
- db.AutoMigrate(Foo{}, Bar{})
- db.Exec("SET FOREIGN_KEY_CHECKS=0")
- tables := []string{"foos", "bars", "foo_bar"}
- for _, table := range tables {
- db.Exec("TRUNCATE TABLE " + table)
- }
- return db
- }
Add Comment
Please, Sign In to add comment