You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:33:30