From 95c52ba9dd6feafc06797129510ca02ec364d940 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 12 Sep 2018 16:21:22 +0800 Subject: [PATCH] - useGetRowsWhenGetRow. --- business/jxstore/cms/user.go | 12 +++++------- business/model/dao/dao.go | 24 +++++++++++++++++++++++- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/business/jxstore/cms/user.go b/business/jxstore/cms/user.go index afb868ed1..07b455445 100644 --- a/business/jxstore/cms/user.go +++ b/business/jxstore/cms/user.go @@ -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) } diff --git a/business/model/dao/dao.go b/business/model/dao/dao.go index 4384fcfc0..2c75b1a02 100644 --- a/business/model/dao/dao.go +++ b/business/model/dao/dao.go @@ -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) {