我需要创建一个 sql 查询:
SELECT * FROM users WHERE id = 10 AND name = "Chetan"
Run Code Online (Sandbox Code Playgroud)
现在,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
}
Run Code Online (Sandbox Code Playgroud)
这意味着它接受查询和参数。例子 :
dbDriver.Where("id = ?", id).First(t)
Run Code Online (Sandbox Code Playgroud)
我如何动态传递多个变量。例子:
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"
Run Code Online (Sandbox Code Playgroud)
是否可以为此类动态 SQL 语句编写单个 gorm 函数?
您可以使用map[string]interface{}for 条件.Where()
m := make(map[string]interface{})\nm["id"] = 10\nm["name"] = "chetan"\ndb.Where(m).Find(&users)\nRun Code Online (Sandbox Code Playgroud)\n只需在地图中添加您的条件,然后发送到内部即可where。
或者您可以使用 struct 中的.Where(). 创建一个结构变量并设置要查询和发送的字段where
db.Where(&User{Name: "chetan", Gender: "Male"}).First(&user)\nRun Code Online (Sandbox Code Playgroud)\n注意:当使用struct查询时,GORM只会查询那些非零值的字段,这意味着如果你的字段\xe2\x80\x99s值为0,\'\',false或其他零值,它将不会\xe2 \x80\x99t 用于构建查询条件。
\n参考: https: //gorm.io/docs/query.html#Struct-amp-Map
\n