- 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

@@ -12,7 +12,7 @@ import (
type StoreUserInfo struct {
model.WeiXins
Members []*model.WeiXins `orm:"-" json:"members"`
MembersStr string `orm:"members_str" json:"-"`
MembersStr string `json:"-"`
}
func GetStoreUsers(storeID int) (storeUserInfo *StoreUserInfo, err error) {
@@ -23,9 +23,8 @@ func GetStoreUsers(storeID int) (storeUserInfo *StoreUserInfo, err error) {
WHERE t1.parentid = -1 AND t1.jxstoreid = ?
GROUP BY t1.id, t1.jxstoreid, t1.openid, t1.tel, t1.nickname, t1.parentid;
`
var storeUserInfos []*StoreUserInfo
if err = dao.GetRows(nil, &storeUserInfos, sql, storeID); err == nil {
storeUserInfo = storeUserInfos[0]
storeUserInfo = new(StoreUserInfo)
if err = dao.GetRow(nil, storeUserInfo, sql, storeID); err == nil {
if storeUserInfo.MembersStr != "" {
err = utils.UnmarshalUseNumber([]byte(storeUserInfo.MembersStr), &storeUserInfo.Members)
}
@@ -42,9 +41,8 @@ func GetUserInfo(mobile string) (storeUserInfo *StoreUserInfo, err error) {
WHERE t1.tel = ?
GROUP BY t1.id, t1.jxstoreid, t1.openid, t1.tel, t1.nickname, t1.parentid;
`
var storeUserInfos []*StoreUserInfo
if err = dao.GetRows(nil, &storeUserInfos, sql, mobile); err == nil {
storeUserInfo = storeUserInfos[0]
storeUserInfo = new(StoreUserInfo)
if err = dao.GetRow(nil, storeUserInfo, sql, mobile); err == nil {
if storeUserInfo.MembersStr != "" {
err = utils.UnmarshalUseNumber([]byte(storeUserInfo.MembersStr), &storeUserInfo.Members)
}

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) {