这是因为GORM默认会将零值和空值视为忽略的条件,不会生成WHERE子句。在Go语言中,数字类型的零值为0,字符串类型的零值为空字符串”“,布尔类型的零值为false,而时间类型的零值为”0001-01-01 00:00:00 +0000 UTC”。
例如,如果你要查询一个字段名为age且其默认值为0的表中所有年龄大于20岁的记录,则可以这样写:
db.Where("age > ?", 20).Find(&users)
这条语句会将符合条件的记录查询出来,并且不会包含age等于0的记录。如果你希望查询出所有年龄大于等于20岁的记录(包括年龄等于0的记录),则可以使用以下语句:
db.Where("age >= ?", 20).Find(&users)
这样就可以将所有年龄大于等于20岁的记录都查询出来了。