gorm —零值(0、““、false等)不参与查询和更新

  • Post author:
  • Post category:其他




问题

当使用零值进行查询时,零值并没有作为查询条件进行查询

更新时也有这样的问题,零值不更新

如:

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

如有不对,烦请指出~