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

如:

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

 如有不对,烦请指出~

在使用gorm的时候如果用结构体进行update或者updates会出现零值、空值不更新的问题,常见的办法有两种: 1.使用Save(),但是Save会保存所有字段,也就是说,必须将所有字段信息全部获取才能更新,否则没有传值的字段会更新成空。 2.使用map接口,即map[string]interface{},但是当我们使用的是protobuf定义了的结构时,转换成map有些许麻烦。 那么该如何解决呢? 合理结合结构体和map来达到可以更新0值的结果。由于在传入字段的时候如果
快速指南: 通过结构体变量更新字段值, gorm 库会忽略零值字段。就是字段值等于 0, nil, “”, false 这些值会被忽略掉,不会更新。如果想更新零值,可以使用 map 类型替代结构体。 我们都知道,使用 golang 定义一个变量并且不赋初始值时,初始值就默认为 0 值,比如 0, nil, “”, false 等。 在使用 gorm 包进行数据库操作时,如果想要进行字段的更新,只需要将要变动的字段进行修改,然后执行 db.Updates() 操作即可。 假定有如下结构体定义:
文章目录1. 场景:2. Gorm更新操作说明1)更新全部字段: `save`2)更新单列字段:`update`3)更新多列字段:`updates`4)更新选定字段: `select`,`omit`3. 参考: 1. 场景: 在配置某一个参数时,假如该参数为bool类型。在从“ture"切换到”false"时发现数据库中没有更换过来 删除一个策略的描述信息时,发现修改失败,描述依然存在 这种情况基本上是由于一个原因导致的:Gorm使用Updates更新数据库操作时,只会更新非零字段。 在Go中0值的
func BenchmarkUpdateWithOptimistic ( b * testing. B ) { dsn := "root:abc123@/test?charset=utf8&parseTime=True&loc=Local" db , err := gorm . Open ( mysql . Open ( dsn ), & gorm. Config {}) if err != nil { fmt . Println ( err ) return b . RunParallel ( func ( pb * testing. PB ) { var out Optimistic db . First ( & out , Optimistic { Id : 1 }) out . Amount =
Go Nested Set是的实现。 该项目是的Go版本,它使用相同的数据结构设计,因此它与一起使用相同的数据。 实际上,原始设计就是为此而设计的,由我们的Rails应用程序中的管理的内容,还需要维护前端Go API。 这是的Go版本,其构建目的是与兼容。 嵌套套可以做什么? 为了管理这样的嵌套树节点: 从拍摄的视频,由awesome_nested_set + 。 go get github.com/griffinqiu/go-nested-set 您必须使用nestedset Stuct标记来定义Gorm模型,如下所示: 支持结构标签: id -int64-节点的主键 parent_id -sql.NullInt64-ParentID列,null为根 lft整数 rgt整数 depth -int-节点的深度 children_count人数 使用Postman,Insomnia,Talend API Tester等。 $ git clone https://github.com/DanielArturoAlejoAlvarez/CRUD-REST-API-WITH-GOLANG-1.16-3-GORM-AND-MYSQL.git [NAME APP] 请按照以下步骤操作,一切顺利! 重要的: 可以在GitHub上( 上查看错误报告和请求请求。 该项目旨在提供一个安全,友好的合作空间,并且希望遵守《行为准则。 根据的规定,该gem可作为开源软件。 $ go get github.com/dedidot/gorm-gin # Download Gin Framework $ go get github.com/gin-gonic/gin # Download GORM $ go get github.com/jinzhu/gorm 在main.go中设置数据库 Config . DB , err = gorm . Open ( "mysql" , "DBUSERNAME:DBPASSWORD@t
先说解决方法,采用map传值 err := getReplenishmentRunWaveDefaultSettingSqlCommon(ctx).Where("id = ?", model.ID).Updates(map[string]interface{}{ "channel_id_list": ent.ChannelIdList, "repl_type": ent.ReplType, "contains_oos": ent.ContainsOos, "contains_non_oos"
GORM 是一个用于在 Go 语言中操作数据库的库。它提供了许多方便的功能,可以帮助开发人员快速查询数据库。 要使用 GORM 进行查询,首先需要连接到数据库,然后使用模型定义查询条件,最后调用查询方法即可。 例如,如果你要查询名为 "John" 的用户,可以这样做: import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" func main() { // 连接到数据库 db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local") if err != nil { panic("连接数据库失败") defer db.Close() // 定义模型 type User struct { Name string // 查询 var user User db.Where("name = ?", "John").First(&user) 希望这能帮到你!