请教一下 gorm 怎么查某个表的多条记录的指定几个字段,每个字段的值返回一个切片

2022-05-31 12:01:58 +08:00
 bronya0

例如一个 user 表有 id 、name 、sex 、desc 四个字段,我想查最后 10 条记录,将十条记录的 name 、sex 、desc 各返回一个切片给我,请问有什么简便的方式嘛,我看官网有 Pluck 可以用,但是只能返回单个字段的切片

1482 次点击
所在节点    Go 编程语言
10 条回复
johnlin
2022-05-31 14:11:29 +08:00
遍历然后自己重新组
2024
2022-05-31 14:22:35 +08:00
可以用这个工具生成 orm , https://github.com/go-home-admin/toolset
直接生成对应函数
type UsersList []*Users

func (l UsersList) GetIdList() []int64 {}
func (l UsersList) GetIdMap() map[int64]*Users {}
chengxiao
2022-05-31 14:27:05 +08:00
type Result strut {

Name string
Sex int
Desc string

}

var result Result

err = db.Table("user").Select("name,sex,desc").Limit(10).Order("id DESC").Find(&result).Error
chengxiao
2022-05-31 14:29:12 +08:00
@chengxiao struct 没补齐,都不会拼字母了哈,😅
2024
2022-05-31 14:36:34 +08:00
@johnlin 每次都重新写太麻烦了, 获取 id 列表,或者 id map 基本是经常用到的,直接生成放着完事。
看我生成的例子
https://github.com/go-home-admin/go-admin/blob/main/app/entity/demo/user.go
ScepterZ
2022-05-31 15:26:44 +08:00
希望 go 以后能.map(_.name).toList
bronya0
2022-05-31 17:38:39 +08:00
@chengxiao 不是这样写啦,我测了这是返回一个切片,其中每个元素是一条数据库记录,只有 Select 的才查其他是零值。我的需求是将多个记录的某个字段组成一个切片,目前就是循环每个记录将制定字段装到一个切片里,这样的方法
Mitt
2022-05-31 18:46:01 +08:00
@bronya0 #7 var result []map[string]interface{}

然后按 1L 说的自己重新切片
LoNeFong
2022-06-01 14:31:37 +08:00
尝试下别人的实现: https://github.com/jucardi/go-streams
fighterlyt
2022-06-01 14:39:26 +08:00
Pluck

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/856412

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX