gorm 的model怎么复用

go r m 的model怎么复用
类似于这种代码,我model怎么给他优化,这样写也太难看了,我查几次就要建几个model

最佳答案

方式二:


func (glc GuestLossController) countBase(c *gin.Context) *gorm.DB {
    model := database.DB.Model(guest_loss.GuestLoss{})
    //列表显示权限判断
    curuser := auth.CurrentUser(c)
    if curuser.CheckRole() == 1 {
        model.Joins("inner join user on user.id = guest_loss.option_id").Where("user.branch_id = ?", curuser.BranchId)
    } else if curuser.CheckRole() == 3 {
        model.Where("guest_loss.option_id=?", curuser.ID)
    }
    if c.Query("begin_at") != "" {
        model.Where("guest_loss.created_at > ?", c.Query("begin_at"))
    }
    if c.Query("end_at") != "" {
        model.Where("guest_loss.created_at <= ?", c.Query("end_at"))
    }
    if c.Query("phone") != "" {
        model.Joins("inner join guest on guest.id = guest_loss.guest_id").Where("guest.phone like ?", "%"+c.Query("phone")+"%")
    }
    return model
}

func (glc GuestLossController) Count(c *gin.Context) {
    var (
        pendding int64
        success  int64
        faild    int64
    )
    glc.countBase().Scopes(guest_loss.Status(0)).Count(&pendding)
    glc.countBase().Scopes(guest_loss.Status(1)).Count(&success)
    glc.countBase().Scopes(guest_loss.Status(2)).Count(&faild)
    response.JSON(c, gin.H{
        "pendding": pendding,
        "success":  success,
        "faild":    faild,
    })

}
1年前 评论
renxiaotu (作者) 1年前
renxiaotu (作者) 1年前
讨论数量: 18
1年前 评论
renxiaotu (作者) 1年前
quanjinxiao (楼主) 1年前
renxiaotu (作者) 1年前
quanjinxiao (楼主) 1年前

代码差不多的提出来做成方法啊

1年前 评论
quanjinxiao (楼主) 1年前
deatil (作者) 1年前
renxiaotu 1年前
quanjinxiao (楼主) 1年前

按:链式调用《GORM 中文文档》 的‘方法链和协程安全’

func (glc GuestLossController) Count(c *gin.Context) {
    var (
        pendding int64
        success  int64
        faild    int64
    )
    model := database.DB.Model(guest_loss.GuestLoss{})
    //列表显示权限判断
    curuser := auth.CurrentUser(c)
    if curuser.CheckRole() == 1 {
        model.Joins("inner join user on user.id = guest_loss.option_id").Where("user.branch_id = ?", curuser.BranchId)
    } else if curuser.CheckRole() == 3 {
        model.Where("guest_loss.option_id=?", curuser.ID)
    }
    if c.Query("begin_at") != "" {
        model.Where("guest_loss.created_at > ?", c.Query("begin_at"))
    }
    if c.Query("end_at") != "" {
        model.Where("guest_loss.created_at <= ?", c.Query("end_at"))
    }
    if c.Query("phone") != "" {
        model.Joins("inner join guest on guest.id = guest_loss.guest_id").Where("guest.phone like ?", "%"+c.Query("phone")+"%")
    }
    ctx1, _ := context.WithTimeout(context.Background(), time.Second)
    ctx2, _ := context.WithTimeout(context.Background(), time.Second)
    model.WithContext(ctx1).Scopes(guest_loss.Status(0)).Count(&pendding)
    model.WithContext(ctx2).Scopes(guest_loss.Status(1)).Count(&success)
    model.Scopes(guest_loss.Status(2)).Count(&faild)
    response.JSON(c, gin.H{
        "pendding": pendding,
        "success":  success,
        "faild":    faild,
    })

}
1年前 评论
quanjinxiao (楼主) 1年前
renxiaotu (作者) 1年前

方式二:


func (glc GuestLossController) countBase(c *gin.Context) *gorm.DB {
    model := database.DB.Model(guest_loss.GuestLoss{})
    //列表显示权限判断
    curuser := auth.CurrentUser(c)
    if curuser.CheckRole() == 1 {
        model.Joins("inner join user on user.id = guest_loss.option_id").Where("user.branch_id = ?", curuser.BranchId)
    } else if curuser.CheckRole() == 3 {
        model.Where("guest_loss.option_id=?", curuser.ID)
    }
    if c.Query("begin_at") != "" {
        model.Where("guest_loss.created_at > ?", c.Query("begin_at"))
    }
    if c.Query("end_at") != "" {
        model.Where("guest_loss.created_at <= ?", c.Query("end_at"))
    }
    if c.Query("phone") != "" {
        model.Joins("inner join guest on guest.id = guest_loss.guest_id").Where("guest.phone like ?", "%"+c.Query("phone")+"%")
    }
    return model
}

func (glc GuestLossController) Count(c *gin.Context) {
    var (
        pendding int64
        success  int64
        faild    int64
    )
    glc.countBase().Scopes(guest_loss.Status(0)).Count(&pendding)
    glc.countBase().Scopes(guest_loss.Status(1)).Count(&success)
    glc.countBase().Scopes(guest_loss.Status(2)).Count(&faild)
    response.JSON(c, gin.H{
        "pendding": pendding,
        "success":  success,
        "faild":    faild,
    })

}
1年前 评论
renxiaotu (作者) 1年前
renxiaotu (作者) 1年前

有没有一种sql,叫group by status,可以直接查出来三种结果在一个列表里?

1年前 评论
quanjinxiao (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!