如何在GORM的Scopes函数中添加OR条件以生成指定SQL语句
实现GORM Scope添加带括号的OR条件并与外部条件组合
直接在MyScope函数里通过GORM的Where方法构建带括号的OR条件即可,GORM会自动将外部的WHERE条件和Scope中的条件用AND拼接,正好符合你要的SQL结构。
静态条件实现
如果你的xxx OR xxx是固定条件,可以直接写在Where的SQL语句里:
func MyScope(db *gorm.DB) *gorm.DB { // 替换成你实际的业务条件,比如 name = '张三' OR phone LIKE '138%' return db.Where("(name = ? OR phone LIKE ?)", "张三", "138%") }
调用你原有的代码:
db.Scopes(MyScope).Where("age > ?", 30).Find(&user)
生成的SQL就是:
SELECT * FROM user WHERE age > 30 AND (name = '张三' OR phone LIKE '138%')
动态条件实现
如果xxx OR xxx是需要动态生成的(比如根据参数添加不同的OR分支),可以用GORM的嵌套Where结合Or方法,GORM会自动为嵌套的条件添加括号:
func MyScope(db *gorm.DB) *gorm.DB { return db.Where(func(tx *gorm.DB) *gorm.DB { query := tx.Where("name = ?", "张三") // 这里可以根据业务逻辑动态添加OR条件 if someCondition { query = query.Or("email LIKE ?", "%@example.com") } if anotherCondition { query = query.Or("age < ?", 25) } return query }) }
这种写法会自动把内部的多个Or条件包裹在括号里,和外部的age > 30用AND连接,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Felix Lee
相关产品推荐
相关产品推荐

