我需要创建一个 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或其他零值,它就赢了'不用于构建查询条件。
关于go - 如何为带有动态变量的where子句编写gorm函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62641090/