beego orm 疑惑

go_ovan · 2019-10-08 16:17:04 · 4266 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-10-08 16:17:04 的主题,其中的信息可能已经有所发展或是发生改变。

嗨,各位大佬们,拉个咨询贴法! 最近看 xorm、gorm、beego orm发现各有自己的优点,但最终决定使用哪个orm框架,还是很迷糊 ,本身很喜欢的django restframework (drf)的 serializer 思路,很方便控制展示API返回的字段;

就这点而言,gorm 查询后有个方法scan(your_struct)以将查询结果赋值自定义字段的struct中,达到drf的效果,xorm和beego orm这两个orm框架目前我还没发现有类似功能(目前发现都是直接将查询结果赋值给查询表struct中,无法一步到位的控制哪些字段不展示),请问有经验的大佬们一般是处理的了?感谢咯

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4266 次点击  
加入收藏 微博
8 回复  |  直到 2019-10-11 17:21:17
heyHui2018
heyHui2018 · #1 · 6年之前

不展示是什么意思?不想查某些字段可以控制column,不想对外输出可以在struct的tag里控制

go_ovan
go_ovan · #2 · 6年之前

@heyHui2018 因为会有这样的需求,同一张表,可能不同API对外展示的字段不一样,所以我想用不同个性化的struct来存通过beego ORM filter后的数据,再由这个struct来对外展示 json ;

A struct { A_Field_NAME json:"a_name" A_Field_VALUE json:"a_value" }

B struct { A_Field_NAME json:"b_name" }

jarlyyn
jarlyyn · #3 · 6年之前
go_ovango_ovan #2 回复

@heyHui2018 因为会有这样的需求,同一张表,可能不同API对外展示的字段不一样,所以我想用不同个性化的struct来存通过beego ORM filter后的数据,再由这个struct来对外展示 json ; A struct { A_Field_NAME `json:"a_name"` A_Field_VALUE `json:"a_value"` } B struct { A_Field_NAME `json:"b_name"` }

....

你这是显示用数据,怎么可以直接把数据库里的模型传过去……

你需要根据不同的接口/视图定义不同的viewmodel,再把数据传进去。

go_ovan
go_ovan · #4 · 6年之前
jarlyynjarlyyn #3 回复

#2楼 @go_ovan .... 你这是显示用数据,怎么可以直接把数据库里的模型传过去…… 你需要根据不同的接口/视图定义不同的viewmodel,再把数据传进去。

嗯嗯 是的

但目前都是前后端分离,所以我需要寻找这样一种方便的方法处理;


Table_A struct {

Field_1 string `json:"field_1"`
Field_2 string `json:"field_2"`

}

Table_B struct {

Table_A `json:"a_group"`
Field_1 string `json:"field_1"`
Field_2 string `json:"field_2"`

}


用 beego ORM filter 查询 Table_B 后 可以得到以下形式的json结果

{
"field_1":xxx,
"field_2":xxx,

"a_group":{
    "field_1":xxx,
    "field_2":xxx,
     }

}


那么我是不是可以通过组装 一个嵌套格式的struct来控制数据字段呢?
jarlyyn
jarlyyn · #5 · 6年之前
go_ovango_ovan #4 回复

#3楼 @jarlyyn 嗯嗯 是的 但目前都是前后端分离,所以我需要寻找这样一种方便的方法处理; ``` Table_A struct { Field_1 string `json:"field_1"` Field_2 string `json:"field_2"` } Table_B struct { Table_A `json:"a_group"` Field_1 string `json:"field_1"` Field_2 string `json:"field_2"` } 用 beego ORM filter 查询 Table_B 后 可以得到以下形式的json结果 { "field_1":xxx, "field_2":xxx, "a_group":{ "field_1":xxx, "field_2":xxx, } } 那么我是不是可以通过组装 一个嵌套格式的struct来控制数据字段呢? ```

看了下你的需求

理论上来说,你需要一个viewmodel的输出结构,然后用一个方法将你查询出来的数据模型转换成相应的输出结构。

比如你可能需要设置a_group对应的值为空时的输出模型。

由于我不用orm,没法给出具体的步骤。

反正我是自己写了生成代码,对于这种join出来的结构直接根据数据库表结构生成代码的……

go_ovan
go_ovan · #6 · 6年之前
jarlyynjarlyyn #5 回复

#4楼 @go_ovan 看了下你的需求 理论上来说,你需要一个viewmodel的输出结构,然后用一个方法将你查询出来的数据模型转换成相应的输出结构。 比如你可能需要设置a_group对应的值为空时的输出模型。 由于我不用orm,没法给出具体的步骤。 反正我是自己写了生成代码,对于这种join出来的结构直接根据数据库表结构生成代码的……

感谢您的回复 谢谢

我就是觉的 viewmodel的方式 有点不适合,有时候简单的SQL 可以直接orm,我感觉很省时间,用习惯了,复杂的还是需要直接写SQL语句;

···· 反正我是自己写了生成代码,对于这种join出来的结构直接根据数据库表结构生成代码的…… ···

请问,您这块有合适的公开代码可以参考下么?谢谢哦

jarlyyn
jarlyyn · #7 · 6年之前
go_ovango_ovan #6 回复

#5楼 @jarlyyn 感谢您的回复 谢谢 我就是觉的 viewmodel的方式 有点不适合,有时候简单的SQL 可以直接orm,我感觉很省时间,用习惯了,复杂的还是需要直接写SQL语句; ···· 反正我是自己写了生成代码,对于这种join出来的结构直接根据数据库表结构生成代码的…… ··· 请问,您这块有合适的公开代码可以参考下么?谢谢哦

如果是简单的sql,其实直接用go的sql库或者sqlx库就很好了。

生成代码本身并不复杂,就是根据不同的数据库做映射的硬功夫而已

https://github.com/herb-go/herb-go/blob/master/mohttps://beego.medules/modelmapper/select.go

https://github.com/herb-go/herb/tree/master/model/sql/db/columns

但这种代码肯定是和你使用的框架深度整合的,所以基本没什么参考意义。

你如果不是一定要使用orm的话,可以考虑querybuilder

go_ovan
go_ovan · #8 · 6年之前
jarlyynjarlyyn #7 回复

#6楼 @go_ovan 如果是简单的sql,其实直接用go的sql库或者sqlx库就很好了。 生成代码本身并不复杂,就是根据不同的数据库做映射的硬功夫而已 https://github.com/herb-go/herb-go/blob/master/mohttps://beego.medules/modelmapper/select.go https://github.com/herb-go/herb/tree/master/model/sql/db/columns 但这种代码肯定是和你使用的框架深度整合的,所以基本没什么参考意义。 你如果不是一定要使用orm的话,可以考虑querybuilder

好的 谢谢

那个 beego.modules 网站 好像无法访问额

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传