当前位置: 首页 > news >正文

江西建站哪家专业福州网站设计外包

江西建站哪家专业,福州网站设计外包,seo站内优化培训,郑州网站推广价格解决Gorm中使用Count后关联查询失效的问题 问题描述 当我们 在go中使用gorm进行多表join关联查询的时候 如果还有分页的需求 那么可能会是这样写 package mainimport (gorm.io/driver/mysqlgorm.io/gormormLogger gorm.io/gorm/loggergorm.io/driver/mysqlgorm.io/gormormLogger gorm.io/gorm/loggertime )func main() {type Detail struct {UesrId int json:user_id // 自增 idAge int json:age // 年龄Email string json:email // 邮箱}type User struct {Id int json:id gorm:primaryKey // 自增 idName string json:name // 名字Detail gorm:foreignKey:UesrId}type MysqlConfig struct {MysqlUrl stringLogger ormLogger.WriterMaxIdleCount intMaxOpen intMaxLifetime time.DurationLogLevel ormLogger.LogLevel}var c MysqlConfigDB, err : gorm.Open(mysql.Open(c.MysqlUrl))if err ! nil {panic(GORM 连接失败, err.Error())}tx : DB.Model(User{}).Joins(Detail)var count int64tx.Count(count)var data []Usertx.Limit(GetLimit()).Offset(GetOffset()).Find(data)} 这样count会计算出值, 而 再查询数据就 会出现数据为空的情况 问题分析: 打印sql出来 SELECT count(*) FROM users SELECT users.id,users.name,users.uesr_id,users.age,users.email FROM users Detail LIMIT 1 OFFSET 3通过查询Count方法的源码我们发现 tx.Statement.AddClause(clause.Select{Expression: clause.Expr{SQL: count(*)}})这里如果调用count方法,gorm会把你的sql的select的字段转换成 count* 所以,通过join关联查询的方式不可以进行对应字段的映射了 解决思路 我们执行查询和执行记数的tx,使用两个就好了 因为go语言是引用类型传递,所以该怎么进行拷贝tx对象呢 查询gorm相关源码发现,session()的源码里包含 // Session create new db session func (db *DB) Session(config *Session) *DB {var (txConfig *db.Configtx DB{Config: txConfig,Statement: db.Statement,Error: db.Error,clone: 1,})if config.Context ! nil || config.PrepareStmt || config.SkipHooks {tx.Statement tx.Statement.clone()tx.Statement.DB tx}func (stmt *Statement) clone() *Statement {copy(newStmt.Joins, stmt.Joins)...// 在这里执行了copy方法 }所以我们可以利用gorm中的session功能深拷贝一个 tx对象,即:tx2 : tx.session() package mainimport (gorm.io/driver/mysqlgorm.io/gormormLogger gorm.io/gorm/loggertime )func main() {type Detail struct {UesrId int json:user_id // 自增 idAge int json:age // 年龄Email string json:email // 邮箱}type User struct {Id int json:id gorm:primaryKey // 自增 idName string json:name // 名字Detail gorm:foreignKey:UesrId}type MysqlConfig struct {MysqlUrl stringLogger ormLogger.WriterMaxIdleCount intMaxOpen intMaxLifetime time.DurationLogLevel ormLogger.LogLevel}var c MysqlConfigDB, err : gorm.Open(mysql.Open(c.MysqlUrl))if err ! nil {panic(GORM 连接失败, err.Error())}tx : DB.Model(User{}).Joins(Detail)tx2 : tx.Session(gorm.Session{})var count int64tx2.Count(count)var data []Usertx.Limit(GetLimit()).Offset(GetOffset()).Find(data)分别打印出内存地址print(tx) // 0x14000282150print(tx2) // 0x140002821e0 } 这样通过gorm中的session可以深拷贝出一个 gorm对象 执行Count后再执行查询不会受影响
http://www.pierceye.com/news/709941/

相关文章:

  • 在线建设网站江苏中南建设集团网站是多少
  • 中国建设银行官网站陕西西安网站建设域名怎么用
  • 佛山高端网站制作公司自己做的网站怎么发布到百度
  • 网站建设空间选择的重要性wordpress菲插件关键词
  • 基于wap的企业网站设计与实现洛阳霞光seo网络公司
  • 在家做的手工活哪里有网站网站开发与运营方向和企业管理方向
  • 厦门网站建设厦门南京宣传片公司有哪些
  • 专门做问卷的网站南宁做网站公司
  • 鹰潭做网站公司网站模板及素材
  • dw网站引导页怎么做wordpress 福利
  • PS网站设计网站每年都要备案吗
  • 建设通网站账号erp实施顾问
  • 变装小说 wordpress网站建设好怎么优化
  • 苏州网站建设制作开发公司江浦做网站
  • 网站开发哪一门语言更快网站设计方案模板
  • 阿里云做网站需要些什么条件个人博客网站设计模板
  • 更改网站模板内容我赢职场wordpress
  • h5模板下载有哪些网站南京高端网站制作公司
  • 户外旅游网站模板佛山网络优化推广公司
  • 海南住房和城乡建设网站技术支持 重庆网站
  • 网站图片展示代码怎样给响应式网站提速
  • 学校 网站建设 招标广而告之微信推广平台
  • 企业如何通过地方网站宣传网站中国建设银行招聘官网
  • 上海品牌网站建设公网站的开发与建设项目
  • 做网站的艰辛电子商务网站建设与维护概述
  • 织梦网站做关键词网站开发到上线的过程
  • 威海千淼网站建设北京知名广告公司有哪些
  • wordpress多站点可视化wordpress主题flarum
  • 网站免费虚拟主机申请成华区微信网站建设公
  • 机械制造设备类企业网站织梦模板网站模板 博客