问题

  当使用零值进行查询时,零值并没有作为查询条件进行查询
  更新时也有这样的问题,零值不更新
 
如:

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

 如有不对,烦请指出~