使用以下代码
package main
import (
"fmt"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type Person struct {
gorm.Model
FirstName string `json:"firstname"`
LastName string `json:"lastname"`
Addresses []PersonAddressLines `gorm:"many2many:person_addresses;" json:"addresses"`
}
type PersonAddressLines struct {
gorm.Model
AddressLine1 string `json:"address_line1"`
AddressLine2 string `json:"address_line2"`
AddressLine3 string `json:"address_line3"`
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
db.Migrator().DropTable("people")
db.Migrator().DropTable("person_addresses")
db.Migrator().DropTable("person_address_lines")
// Migrate the schema
err = db.AutoMigrate(&PersonAddressLines{}, &Person{})
if err != nil {
panic("Cannot migrate")
}
fmt.Println(">> Create Person")
// Create
var OriginalPerson = &Person{FirstName: "Sample", LastName: "Person", Addresses: []PersonAddressLines{
{AddressLine1: "1 Some Street", AddressLine2: "Somewhere"},
}}
fmt.Println(">> Reload Person")
db.Debug().Create(&OriginalPerson)
// Load the person again and update
var person Person
db.Preload("Addresses").First(&person, 1) //get the first person..
person.Addresses[0].AddressLine2 = "CHANGED!!!"
fmt.Println(">> Update with New Address")
db.Debug().Save(&person)
fmt.Println (">> New value " + person.Addresses[0].AddressLine2)
// Reload from database is it changed??
fmt.Println(">> Reloading Person again...")
var newPerson Person
db.Preload("Addresses").First(&newPerson, 1) //get the first person..
fmt.Println("Changed Person Value: Expect 'CHANGED!!!' == " + person.Addresses[0].AddressLine2)
fmt.Println("New Person Value: Expect 'CHANGED!!!' == " + newPerson.Addresses[0].AddressLine2)
}
Run Code Online (Sandbox Code Playgroud)
更改为
person.Addresses[0].AddressLine2 = "CHANGED!!!"
Run Code Online (Sandbox Code Playgroud)
数据库中未更新。这是一个错误还是我做错了什么?
我对 postgres 也有同样的问题。
| 归档时间: |
|
| 查看次数: |
4048 次 |
| 最近记录: |