ZBLOG

gorm where查询,如果字段等于0或者NULL,并且使用&ModelName{} 的方式查询的时候,就不会在sql中出现这个where条件,但是使用字符串写sql就可以,为什么?

这是因为GORM在使用&ModelName{}的方式查询时,会将结构体中默认值为0或者NULL的字段忽略掉,不会将其作为WHERE条件。而如果你使用字符串写SQL语句,则可以自由地指定WHERE条件,无论该字段是否为0或NULL都可以进行查询。

举个例子来说,假设有一个User结构体如下:

type User struct {
    ID   uint
    Name string
    Age  int
}

当你使用以下代码进行查询时:

var user User
db.Where(&User{Name: "John", Age: 0}).First(&user)

GORM会忽略Age字段等于0的记录,只返回符合Name等于”John”的记录。但是如果你使用以下代码进行查询,则可以包含Age等于0的记录:

var users []User
db.Raw("SELECT * FROM users WHERE name = ? AND age <= ?", "John", 0).Scan(&users)

这条语句会将符合条件的所有记录都查询出来,并且不管Age是否为0都不会被忽略掉。因此,在使用GORM进行查询时,需要注意结构体中默认值对查询结果的影响。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=2792

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?