问题
当使用零值进行查询时,零值并没有作为查询条件进行查询
更新时也有这样的问题,零值不更新
如:
db.Where(&User{Name: "jinzhu", Age: 0}).Find(&users)
执行的sql语句是
SELECT * FROM "user" WHERE "Name" = "jinzhu"
而不是
SELECT * FROM "user" WHERE "Name" = "jinzhu" AND "Age" = 0
原因
当使用结构作为条件查询时,GORM 只会查询非零值字段,更新也是如此。
解决方案
查询
:
使用 map 来构建查询条件
db.Where(map[string]interface{}{"Name": "jinzhu", "Age": 0}).Find(&users)
更新
:
使用 map 来构建更新条件,而不是结构体
user{}
或者,使用
Save
保存所有的字段,即使字段是零值
db.Model(&user).Where("Name", "jinzhu").Updates(map[string]interface{}{"Age": 0})
//或
user.Name = "shuai"
user.Age = 0
db.Save(&user)
参考自:https://www.kancloud.cn/sliver_horn/gorm
如有不对,烦请指出~