Gorm 使用模型如何控制返回列
本人GO
新手,正在学习gorm
,有个问题一直找不到方法,想来请教下各位,拜托了
我定义文章表模型 Post
,其中images
字段存放的是图片数组json
字符串,模型使用 AfterFind
HOOK,借用ImagesStr
读取图片字符串,再转为 []PostImage
,放到实际想返回字符:images
package models
import ....
type Post struct {
Id int `json:"id" gorm:"id;primaryKey"`
Title string `json:"title" gorm:"title"`
//...此处省略其他无关字段
ImagesStr string `json:"-" gorm:"column:images"`
Images []PostImage `json:"images" gorm:"-"`
}
// 图片结构
type PostImage struct {
Name string `json:"name"`
Url string `json:"url"`
}
// 处理json串返回格式
func (data *Post) AfterFind(tx *gorm.DB) error {
//...省略其他代码
json.Unmarshal([]byte(data.ImagesStr), &data.Images)
return nil
}
当我用
map[string]interface{}{}
接收结果返回时,不会触发AfterFind
,得到images
是字符串。
代码如下:postlist := map[string]interface{}{} db.Model(&Post).Select("id,images").Find(&postlist)
当我用
[]Post
作为结果返回时,结果会把所有Post
模型定义过的字段都返回,没有select
g到的字段会返回字段类型的默认值
代码如下:var postlist []Post db.Model(&Post).Select("id,images").Find(&postlist)
如果重定义
struct
来接收查询结果 ,又感觉model
已经定义过了type ResPost struct{ Id int Images []PostImage } var postlist []ResPost db.Model(&Post).Select("id,images").Find(&postlist)
如何才能让返回结果只返回Select("xx,xxx")
选中字段,当有images
字段,又会自动把images
转为数组??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
应该这么写:
看gorm的源码,
SELECT
语句并没有使用,
来分隔,所以你应该传入一个切片。