mirror of
https://github.com/tangpanqing/aorm.git
synced 2025-09-27 04:16:26 +08:00
89 lines
1.8 KiB
Go
89 lines
1.8 KiB
Go
package builder
|
|
|
|
import "reflect"
|
|
|
|
// Value 字段值
|
|
func (b *Builder) Value(field interface{}, dest interface{}) error {
|
|
b.Select(field).Limit(0, 1)
|
|
|
|
fieldName := getFieldNameByField(field)
|
|
|
|
stmt, rows, errRows := b.GetRows()
|
|
if errRows != nil {
|
|
return errRows
|
|
}
|
|
defer stmt.Close()
|
|
defer rows.Close()
|
|
|
|
destValue := reflect.ValueOf(dest).Elem()
|
|
|
|
//从数据库中读出来的字段名字
|
|
columnNameList, errColumns := rows.Columns()
|
|
if errColumns != nil {
|
|
return errColumns
|
|
}
|
|
|
|
for rows.Next() {
|
|
var scans []interface{}
|
|
for _, columnName := range columnNameList {
|
|
if fieldName == columnName {
|
|
scans = append(scans, destValue.Addr().Interface())
|
|
} else {
|
|
var emptyVal interface{}
|
|
scans = append(scans, &emptyVal)
|
|
}
|
|
}
|
|
|
|
err := rows.Scan(scans...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Pluck 获取某一列的值
|
|
func (b *Builder) Pluck(field interface{}, values interface{}) error {
|
|
b.Select(field)
|
|
fieldName := getFieldNameByField(field)
|
|
|
|
stmt, rows, errRows := b.GetRows()
|
|
if errRows != nil {
|
|
return errRows
|
|
}
|
|
defer stmt.Close()
|
|
defer rows.Close()
|
|
|
|
destSlice := reflect.Indirect(reflect.ValueOf(values))
|
|
destType := destSlice.Type().Elem()
|
|
destValue := reflect.New(destType).Elem()
|
|
|
|
//从数据库中读出来的字段名字
|
|
columnNameList, errColumns := rows.Columns()
|
|
if errColumns != nil {
|
|
return errColumns
|
|
}
|
|
|
|
for rows.Next() {
|
|
var scans []interface{}
|
|
for _, columnName := range columnNameList {
|
|
if fieldName == columnName {
|
|
scans = append(scans, destValue.Addr().Interface())
|
|
} else {
|
|
var emptyVal interface{}
|
|
scans = append(scans, &emptyVal)
|
|
}
|
|
}
|
|
|
|
err := rows.Scan(scans...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
destSlice.Set(reflect.Append(destSlice, destValue))
|
|
}
|
|
|
|
return nil
|
|
}
|