gofream Fields() 和 Count()同时使用出现问题

在GoframeORM操作中,当尝试对同一个查询实例同时使用Fields和Count方法时,遇到了SQL错误。问题在于Count函数处理的SQL与Fields指定的列不匹配。解决方案是将Count和Fields操作分开到不同的查询中,确保每个查询的上下文正确。修改后的代码将Count和Fields方法分别应用于不同的查询,从而解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用gofream的 Fields() 和 Count() 操作出现了问题

如下为 resume 表左连接 post 表进行的一个简单的链式调用

func (s *sServer) GetResumes4Page(ctx g.Ctx, req *v1.GetDateReq) (res *v1.GetDateRes, err error) {
	err = g.Try(ctx, func(ctx g.Ctx) {
			m := g.DB().Model("resume r").Safe().Ctx(ctx)
			
			// #1 
			m = m.LeftJoin("post p", "r.post_id = p.id").Fields("r.*", "p.name post_name")
			// 中间省略一些判断代码
			if ...{
			.....
			....
			}
			
			// #2 
			res.Total, err = m.Count()
			
			err = m.Page(req.PageNum, req.PageSize).Scan(&res.Records)
		})
	return
}

运行发现日志报错,并打印出报错的sql

SELECT COUNT(r.*,p.name post_name)
FROM `recruit_resume` r LEFT JOIN `recruit_post` p ON (r.post_id = p.id) 
WHERE (r.degree = 1) AND `r`.`deleted_at` IS NULL AND `p`.`deleted_at` IS NULL

其中明显看出 sql 语句中 Count()函数报错。

报错的原因是链式调用引起的
解决的办法是将 Count() 和 Fields() 分别进行执行,不适用同一个链式

func (s *sServer) GetResumes4Page(ctx g.Ctx, req *v1.GetDateReq) (res *v1.GetDateRes, err error) {
	err = g.Try(ctx, func(ctx g.Ctx) {
			m := g.DB().Model("resume r").Safe().Ctx(ctx)
			m = m.LeftJoin("post p", "r.post_id = p.id")
			// 中间省略一些判断代码
			if ...{
			.....
			....
			}
			
			// #1
			res.Total, err = m.Count()
			// #2
			err = m.Fields("r.*", "p.name post_name").Page(req.PageNum, req.PageSize).Scan(&res.Records)
		})
	return
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值