listTo,valueTo

This commit is contained in:
飞哥(fizzday)
2024-04-12 17:26:00 +08:00
parent d9e0eebeb5
commit a50a2182ae
3 changed files with 27 additions and 2 deletions

View File

@@ -501,13 +501,17 @@ func (db *Database) Bind(obj any) (err error) {
// ListTo 获取指定列的值列表。
func (db *Database) ListTo(column string, obj any) (err error) {
return db.Select(column).toBind(obj)
}
func (db *Database) ListTo2(column string, obj any) (err error) {
ress, err := db.Get(column)
if err != nil {
return err
}
rfv := reflect.Indirect(reflect.ValueOf(obj))
for _, v := range ress {
rfv.Set(reflect.Append(rfv, reflect.ValueOf(v[column])))
rfv2 := reflect.ValueOf(v)
rfv.Set(reflect.Append(rfv, rfv2.MapIndex(rfv2.MapKeys()[0])))
}
return
}
@@ -527,6 +531,13 @@ func (db *Database) PluckTo(column string, keyColumn string, obj any) (err error
// ValueTo 获取指定字段的值,并绑定到给定的变量中
func (db *Database) ValueTo(column string, obj any) (err error) {
prepare, values, err := db.Select(column).ToSql()
if err != nil {
return err
}
return db.QueryRow(prepare, values...).Scan(obj)
}
func (db *Database) ValueTo2(column string, obj any) (err error) {
first, err := db.First(column)
if err != nil {
return err

View File

@@ -142,7 +142,8 @@ func (s *Engin) rowsToBind(rows *sql.Rows, bind any) (err error) {
case reflect.Struct:
return s.rowsToStruct(rows, rfv)
default:
return errors.New("only struct(slice) or map(slice) supported")
return s.rowsToSliceOnly(rows, rfv)
//return errors.New("only struct(slice) or map(slice) supported")
}
case reflect.Map:
return s.rowsToMap(rows, rfv)
@@ -270,3 +271,16 @@ func (s *Engin) rowsToMap(rows *sql.Rows, rfv reflect.Value) error {
}
return nil
}
func (s *Engin) rowsToSliceOnly(rows *sql.Rows, rfv reflect.Value) error {
defer rows.Close()
for rows.Next() {
val := reflect.Indirect(reflect.New(rfv.Type().Elem()))
err := rows.Scan(val.Addr().Interface())
if err != nil {
return err
}
rfv.Set(reflect.Append(rfv, val))
}
return nil
}

0
go.sum
View File