Skip to content

database/gdb: Scan, Array, Value deserialization enhancement #3977

Open
@cyjaysong

Description

@cyjaysong

Description

目前Scan不支持将查询的某个字段结果直接反序列化至指定变量,如下:

案例表结构
type User struct {
	Id       int64
	Username string
	Balance  decimal.Decimal
      	State    bool
}

1、
var  balance decimal.Decimal
err := db.Model("user").Fields("balance").Where("id", 1).Scan(&balance)
2、
var  totalBalance decimal.Decimal
err := db.Model("user").FieldSum("balance").WhereIn("id", []int64{1,2,3,4,5}).Scan(&totalBalance)
3、
var  username string
err := db.Model("user").Fields("username").Where("id", 1).Scan(&username)
4、
var ids []int64
err := db.Model("user").Fields("id").Where("state", true).Scan(&ids)

我尝试过封装ValueScan,但是当需要承接数据的变量为基本数据类型的变量时还是存在问题,所以我关闭了这个PR

var  balance decimal.Decimal
val, err := db.Model("user").Fields("balance").Where("id", 1).Value()
val.Scan(&balance)  //此时,balance 能够获取到正确的值

var  id int64
val, err := db.Model("user").Fields("id").Where("id", 1).Where("state", true).Value()
err = val.Scan(&id)  //此时,id 不能能获取到正确的值,err不为空,不支持基本数据类型

Additional

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussWe need discuss to make decision.featurehelp wantedplannedThis issue/proposal is planned into our next steps.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions