GORM Playground Link
https://github.com/go-gorm/playground/pull/486
Description
使用 Find 扫描数据到结构体切片,如果结构体字段类型为 string,数据库字段值为 NULL,得到的结构体字段值将是上一个不为 NULL 的值。
users := [...]User{{Name: "NOT_NULL"}, {Age: 18}}
DB.Create(&users)
// INSERT INTO "users" ("created_at","updated_at","deleted_at","name","age","birthday","company_id","manager_id","active") OUTPUT INSERTED."id" VALUES
// ('2022-06-29 18:36:12.292','2022-06-29 18:36:12.292',NULL,'NOT_NULL',0,NULL,NULL,NULL,0),
// ('2022-06-29 18:36:12.292','2022-06-29 18:36:12.292',NULL,'',18,NULL,NULL,NULL,0);
for _, u := range users {
t.Logf("user id is [%d], username is [%s]", u.ID, u.Name)
}
targetID := users[1].ID
// Set the target field value to NULL
DB.Model(&User{}).Where(&User{Model: gorm.Model{ID: targetID}}).UpdateColumn("name", nil)
// UPDATE "users" SET "name"=NULL WHERE "users"."id" = 3 AND "users"."deleted_at" IS NULL
var data []User
DB.Model(&User{}).Find(&data)
// SELECT * FROM "users" WHERE "users"."deleted_at" IS NULL
for _, item := range data {
t.Logf("user id is [%d], username is [%s]", item.ID, item.Name)
if item.ID == targetID && item.Name != "" {
t.Errorf("The username with id [%d] should be empty!", item.ID)
}
}
// user id is [1], username is [jinzhu]
// user id is [2], username is [NOT_NULL]
// user id is [3], username is [NOT_NULL]
// The username with id [3] should be empty!
Comment From: a631807682
duplicated of https://github.com/go-gorm/gorm/issues/5415