acmestack / gorm-plus

Gorm-plus是基于Gorm的增强版,类似Mybatis-plus语法。Gorm-plus is based on an enhanced version of Gorm, similar to Mybatis-plus syntax.
https://github.com/acmestack/gorm-plus/wiki
Apache License 2.0
285 stars 44 forks source link

目前似乎没有看到有关动态表相关的支持,可以添加这个需求的支持吗 #67

Open PhoenixL0911 opened 1 year ago

PhoenixL0911 commented 1 year ago

场景如下:通过租户或者ID首位分表(如user_1、user_2、user_3等),这种场景下只有前端的请求到来的时候,才知道应该具体去查询哪一张表,我在代码里没有看到关于表名的设置,目前我用的是GORM原生的Scopes方法去动态加载表名,可以为这个需求添加支持吗?

afumu commented 1 year ago

image

    db := gormDb.Scopes(func(db *gorm.DB) *gorm.DB {
        // 自定义表
        return db.Table("users")
    })
    query, _ := gplus.NewQuery[User]()
    // 传入Db
    list, db := gplus.SelectList[User](query, gplus.Db(db))
    if db.Error != nil {
        return
    }
    for _, item := range list {
        fmt.Println(item)
    }

这样是否能满足你的要求

场景如下:通过租户或者ID首位分表(如user_1、user_2、user_3等),这种场景下只有前端的请求到来的时候,才知道应该具体去查询哪一张表,我在代码里没有看到关于表名的设置,目前我用的是GORM原生的Scopes方法去动态加载表名,可以为这个需求添加支持吗?

PhoenixL0911 commented 1 year ago

image

  db := gormDb.Scopes(func(db *gorm.DB) *gorm.DB {
      // 自定义表
      return db.Table("users")
  })
  query, _ := gplus.NewQuery[User]()
  // 传入Db
  list, db := gplus.SelectList[User](query, gplus.Db(db))
  if db.Error != nil {
      return
  }
  for _, item := range list {
      fmt.Println(item)
  }

这样是否能满足你的要求

场景如下:通过租户或者ID首位分表(如user_1、user_2、user_3等),这种场景下只有前端的请求到来的时候,才知道应该具体去查询哪一张表,我在代码里没有看到关于表名的设置,目前我用的是GORM原生的Scopes方法去动态加载表名,可以为这个需求添加支持吗?

我目前就是这样子做的,但是这一部分的逻辑代码太多重复了。另外还有个,能否再添加一组QueryCond,类似mybatis plus的 boolean condition 那样,根据bool条件去决定是否要拼接sql。

afumu commented 1 year ago

可以的,你感兴趣的话,也可以提交pr