- useGetRowsWhenGetRow.

This commit is contained in:
gazebo
2018-09-12 16:21:22 +08:00
parent 0fd377e0d3
commit 95c52ba9dd
2 changed files with 28 additions and 8 deletions

View File

@@ -1,6 +1,7 @@
package dao
import (
"errors"
"reflect"
"time"
@@ -10,6 +11,10 @@ import (
"github.com/astaxie/beego/orm"
)
const (
useGetRowsWhenGetRow = true
)
type DaoDB struct {
db orm.Ormer
}
@@ -72,7 +77,24 @@ func GetRow(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (er
if db == nil {
db = GetDB()
}
return db.db.Raw(sql, values).QueryRow(inPtr)
if !useGetRowsWhenGetRow { // beego QueryRow有bug嵌入的struct不能正常绑定
err = db.db.Raw(sql, values).QueryRow(inPtr)
} else {
typeInfo := reflect.TypeOf(inPtr)
if typeInfo.Kind() != reflect.Ptr {
return errors.New("inPtr must be ptr")
}
slice := reflect.New(reflect.SliceOf(typeInfo.Elem()))
if err = GetRows(db, slice.Interface(), sql, values...); err == nil {
slice = slice.Elem()
if slice.Len() > 0 {
reflect.ValueOf(inPtr).Elem().Set(slice.Index(0))
} else {
return orm.ErrNoRows
}
}
}
return err
}
func GetRows(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) {