- useGetRowsWhenGetRow.
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user