Skip to content

Instantly share code, notes, and snippets.

@djberg96
Last active April 27, 2021 13:50
Show Gist options
  • Select an option

  • Save djberg96/5023d066406b662546b811f4c6042b23 to your computer and use it in GitHub Desktop.

Select an option

Save djberg96/5023d066406b662546b811f4c6042b23 to your computer and use it in GitHub Desktop.
// Run "createdb pgstuff" first
package main
import(
"fmt"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"time"
)
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time `json:"created_at,omitempty"`
UpdatedAt time.Time `json:"updated_at,omitempty"`
}
type Service struct {
Model
Owner string
Name string `gorm:"not null; index"`
PeerDependencies []PeerDependency `gorm:"many2many:peer_memberships"`
}
type PeerDependency struct {
Model
Name string
Owner string
Services []Service `gorm:"many2many:peer_memberships"`
}
func main() {
conf := &gorm.Config{
PrepareStmt: false,
FullSaveAssociations: false,
SkipDefaultTransaction: true,
}
pconf := postgres.Config{
DSN: "user=dberger password=dberger dbname=pgstuff",
PreferSimpleProtocol: true,
}
db, err := gorm.Open(postgres.New(pconf), conf)
if err != nil {
panic("failed to connect database")
}
db.AutoMigrate(&Service{}, &PeerDependency{})
pd1 := PeerDependency{
Name: "databases",
Owner: "[email protected]",
Services: []Service{
{Name: "mysql", Owner: "[email protected]"},
{Name: "postgres", Owner: "[email protected]"},
},
}
db.Create(&pd1)
var pd PeerDependency
db.Debug().Preload("Services").First(&pd)
fmt.Printf("PD:\t %v\n\n", pd)
fmt.Printf("SERVICES:\t %v\n\n", pd.Services)
var service Service
db.Preload("PeerDependencies").First(&service)
fmt.Printf("SERVICE 1:\t %v\n\n", service)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment