首页 > 解决方案 > GORM 协会未更新

问题描述

使用以下代码

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)
}

更改为

person.Addresses[0].AddressLine2 = "CHANGED!!!"

未在数据库中更新。这是一个错误还是我做错了什么?

我对 postgres 也有同样的问题。

标签: gogo-gorm

解决方案


推荐阅读