Back to snippets
gorm_associations_has_one_has_many_crud_with_preload.go
goA quickstart example demonstrating how to define models with associati
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}