标签 transaction 下的文章

错误用法

err := db.Transaction(func(tx *gorm.DB) error {
        tx = tx.Where("tid=?", req.Tid).Delete(Model{})
        if err := tx.Error; err != nil {
            common.LOGGER.Errorf("delete t fail,error:%s", err)
            return fmt.Errorf("删除任务出错")
        }

        if tx.RowsAffected == 0 {
            return fmt.Errorf("操作失败,请检查任务状态")
        }

        err := tx.Where("tid=?", req.Tid).Delete(Result{}).Error
        if err != nil {
            common.LOGGER.Errorf("delete result fail,error:%s", err)
            return fmt.Errorf("删除任务出错")
        }

        return nil
    })

正确用法

err := db.Transaction(func(tx *gorm.DB) error {
        result = tx.Where("tid=?", req.Tid).Delete(Model{})
        if err := result.Error; err != nil {
            common.LOGGER.Errorf("delete t fail,error:%s", err)
            return fmt.Errorf("删除任务出错")
        }

        if result.RowsAffected == 0 {
            return fmt.Errorf("操作失败,请检查任务状态")
        }

        result = tx.Where("tid=?", req.Tid).Delete(Result{})
        if err := result.Error; err != nil {
            common.LOGGER.Errorf("delete result fail,error:%s", err)
            return fmt.Errorf("删除任务出错")
        }

        return nil
    })