首页 > 解决方案 > 使用 postgres 在 GORM 中使用 struct 进行 Like/gte/lte 查询

问题描述

我有一个User这样的结构:

type User struct {
    Username         string `json:"username" bson:"username"`
    AuthorizationKey string `json:"authorization_key" bson:"authorization_key"`
    IsActive         bool   `json:"is_active" bson:"is_active"`
}

现在我可以查询整个username使用

user := &User{}
if err := db.Where(&User{
    Username: username,
}).Find(&user).Error; err != nil {
    return user, err
}

我使用这个语句进行like查询(普通查询)

db.Where("username LIKE ?", fmt.Sprintf("%%%s%%", username)).Find(&users)

是否可以使用like结构格式的用户名字段查询?大于还是小于呢?

标签: postgresqlgoormgo-gorm

解决方案


我认为这是不可能的, Struct in where 条件用于对字段进行相等检查(Ref

db.Where(&User{ Username: username})

对于Like/gte/lte查询,您必须在里面使用纯 SQLwhere()

db.Where("username LIKE ?", fmt.Sprintf("%%%s%%", username)).Find(&users)

参考这里


推荐阅读