原始問題在 GORM 中使用該Update方法時,不會保存新數據。即我想設置一個boolfrom trueto false,但即使在Update方法之后它仍然保持真實。在該方法的描述中有一條警告:“使用結構更新時警告,GORM 不會更新零值的字段”由于我使用結構來更新并且false是 的零值bool,這似乎是預期的行為,但我看不出有任何理由這樣做以及如何克服這一點。func UpdateData(c *fiber.Ctx) error { db := database.DBConn data := new([]entities.Data) if err := c.BodyParser(&data); err != nil { return err } db.Update(&data) return c.JSON(data)}解決方案總結new首先,正如建議的那樣,我在實例化結構時省略了關鍵字。然后,我使用了一個輔助函數(從這里開始)將結構轉換為映射,同時將 json 別名作為鍵:// StructToMap Converts a struct to a map while maintaining the json alias as keysfunc StructToMap(obj interface{}) (newMap map[string]interface{}, err error) { data, err := json.Marshal(obj) if err != nil { return } err = json.Unmarshal(data, &newMap) // Convert to a map return}然后我循環遍歷數據切片中的每個元素,以便對其進行轉換并一一更新:func UpdateData(c *fiber.Ctx) error { db := database.DBConn data := []entities.Dard{} if err := c.BodyParser(&data); err != nil { return err } for _, record := range data { mappedData, _ := StructToMap(record) db.Model(&entities.Data{}).Update(mappedData) } return c.JSON(data)}*在這個例子中,錯誤處理明顯減少了。
添加回答
舉報
0/150
提交
取消
