go - 如何为带有动态变量的where子句编写gorm函数

标签 go go-gorm

我需要创建一个 sql 查询:

SELECT * FROM users WHERE id = 10 AND name = "Chetan"

现在,gorm 的 where 函数如下所示,

// Where return a new relation, filter records with given conditions, accepts `map`, `struct` or `string` as conditions, refer http://jinzhu.github.io/gorm/crud.html#query
func (s *DB) Where(query interface{}, args ...interface{}) *DB {
    return s.clone().search.Where(query, args...).db
}

这意味着它接受查询和参数。示例:

dbDriver.Where("id = ?", id).First(t)

我如何动态传递多个变量。示例:

SELECT * FROM users WHERE id = 10 AND name = "Chetan"
SELECT * FROM users WHERE id = 10
SELECT * FROM users WHERE gender = "male" AND name = "Chetan" AND age = "30"

是否可以为这种动态 SQL 语句编写单个 gorm 函数?

最佳答案

您可以在 .Where()

中使用 map[string]interface{}
m := make(map[string]interface{})
m["id"] = 10
m["name"] = "chetan"
db.Where(m).Find(&users)

只需在 map 中添加您的条件,然后在 where 中发送。

或者你可以在.Where()中使用struct。创建一个结构变量,并在 where

中设置要查询和发送的字段
db.Where(&User{Name: "chetan", Gender: "Male"}).First(&user)

注意:使用struct查询时,GORM只会查询那些非零值的字段,也就是说如果你的字段的值为0、''、false或其他零值,它就赢了'不用于构建查询条件。

引用:https://gorm.io/docs/query.html#Struct-amp-Map

关于go - 如何为带有动态变量的where子句编写gorm函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62641090/

相关文章:

mysql - 如何打开和关闭数据库连接

使用bolthold 3条件进行boltDB查询

go - 为什么golang strings.Builder 是这样实现String()的?

go - golang中的多文件项目

go - 是否可以将测试文件放在子文件夹中

mysql - 无法在 Go 中连接到远程 MySql

go - 是否可以将结构的 slice 作为接口(interface)传递给方法?

go - 如何设置数据库的时区

javascript - 如何使用jQuery从golang代码(服务器)获取数据?

sqlite - 选择所有不在相关表中的