gorm模糊查询匹配多列出现问题了

前端的参数是这样的
image.png
我用了gorm的Or方法进行模糊查询多列匹配,结果把is_del = 1的记录也查出来了,我要怎么做才能正确查询出结果呢?

后端代码如下:

func GetUsers(param *models.ListUserReq) ([]*models.User, int, error) {
    var users []*models.User
    var count int
    _db := db
    keyword := param.Keyword
    if keyword != "" {
        _db = _db.Where("username LIKE ?", "%"+keyword+"%").Or("nickname LIKE ?", "%"+keyword+"%")
    }
    if param.Type > 0 {
        _db = _db.Where("type = ?", param.Type)
    }
    _db = _db.Where("is_del = ?", param.IsDel)
    order := fmt.Sprintf("%s %s", param.OrderName, param.OrderType)
    err := _db.Order(order).Offset(param.PageNum * param.PageSize).Limit(param.PageSize).Find(&users).Error
    if err != nil && err != gorm.ErrRecordNotFound {
        return nil, 0, err
    }

    if err := _db.Model(&models.User{}).Count(&count).Error; err != nil {
        return nil, 0, err
    }

    return users, count, nil
}
阅读 6.1k
1 个回答

_db = _db.Where("username LIKE ?", "%"+keyword+"%").Or("nickname LIKE ?", "%"+keyword+"%")

改成

_db = _db.Where("username LIKE ? OR nickname LIKE ?", "%"+keyword+"%", "%"+keyword+"%")

就可以了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题