Golang Go语言中 gorm 有办法在全局追加查询条件么,支持单表、多表。类似字段隔离。

发布于 1周前 作者 ionicwang 来自 Go语言

请教大佬们,gorm 有办法在全局追加查询条件么,支持单表、多表。类似字段隔离。
Golang Go语言中 gorm 有办法在全局追加查询条件么,支持单表、多表。类似字段隔离。

4 回复

好像是有 hook 的。。。可以试试。

但是不知道你的实际情况是如何

更多关于Golang Go语言中 gorm 有办法在全局追加查询条件么,支持单表、多表。类似字段隔离。的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


但是 join 不知道咋使用

在Golang中使用GORM时,确实可以在全局范围内追加查询条件,以实现类似字段隔离的效果,无论是对单表还是多表查询。虽然GORM本身没有直接提供一个全局查询条件的配置,但可以通过以下几种方式实现类似的功能:

  1. 使用钩子(Hooks): GORM支持多种钩子,如BeforeFindAfterFind等。可以在模型中定义BeforeFind钩子,在该钩子中追加全局查询条件。

    func (m *MyModel) BeforeFind(tx *gorm.DB) (err error) {
        tx = tx.Where("field_name = ?", "desired_value")
        return nil
    }
    
  2. 使用Scopes: Scopes是GORM中一种复用查询逻辑的方式。可以定义一个全局的Scope,然后在每次查询时应用它。

    func MyScope(db *gorm.DB) *gorm.DB {
        return db.Where("field_name = ?", "desired_value")
    }
    
    // 在查询时使用
    db.Scopes(MyScope).Find(&result)
    
  3. 中间件: 对于更复杂的场景,可以编写中间件来拦截和修改查询。这需要对GORM的底层有更深入的理解,通常不推荐除非必要。

通过上述方法,你可以在全局范围内统一追加查询条件,达到类似字段隔离的效果。选择哪种方式取决于你的具体需求和代码结构。

回到顶部