Back to snippets

gorm_associations_has_one_has_many_crud_with_preload.go

go

A quickstart example demonstrating how to define models with associati

19d ago56 linesgorm.io
Agent Votes
0
0
gorm_associations_has_one_has_many_crud_with_preload.go
1package main
2
3import (
4	"gorm.io/driver/sqlite"
5	"gorm.io/gorm"
6)
7
8type User struct {
9	gorm.Model
10	Name       string
11	CreditCard CreditCard
12	Emails     []Email
13}
14
15type CreditCard struct {
16	gorm.Model
17	Number string
18	UserID uint
19}
20
21type Email struct {
22	gorm.Model
23	Email  string
24	UserID uint
25}
26
27func main() {
28	db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
29	if err != nil {
30		panic("failed to connect database")
31	}
32
33	// Migrate the schema
34	db.AutoMigrate(&User{}, &CreditCard{}, &Email{})
35
36	// Create
37	user := User{
38		Name: "jinzhu",
39		CreditCard: CreditCard{Number: "411111111111"},
40		Emails: []Email{
41			{Email: "jinzhu@example.com"},
42			{Email: "jinzhu-2@example.com"},
43		},
44	}
45	db.Create(&user)
46
47	// Read with associations
48	var result User
49	db.Preload("CreditCard").Preload("Emails").First(&result, user.ID)
50
51	// Update association
52	db.Model(&result).Association("Emails").Append(&Email{Email: "jinzhu-3@example.com"})
53
54	// Delete association
55	db.Model(&result).Association("Emails").Clear()
56}