Closed bingtianyiyan closed 12 months ago
分析的非常好,如果你感兴趣的话,欢迎你提交pr哈
分析的非常好,如果你感兴趣的话,欢迎你提交pr哈 我已经提交pr了哈,你看下,然后把自己之前项目增加的cond条件拼接也加进去了
分析的非常好,如果你感兴趣的话,欢迎你提交pr哈 我已经提交pr了哈,你看下,然后把自己之前项目增加的cond条件拼接也加进去了
在pr下面回复一下 I have read the CLA Document and I hereby sign the CLA 签一下cla
gorm对count的执行如果包含distinct 或者列别名会执行报错在mysql,我找了相应的issue :https://github.com/go-gorm/gorm/issues/5821
我的用法:
报错的地方: func SelectCount[T any](q QueryCond[T], opts ...OptionFunc) (int64, gorm.DB) { var count int64 resultDb := buildCondition(q, opts...) resultDb.Count(&count) //这里执行会生成sql不正确 return count, resultDb }
sql生成比方说是生成这样的:SELECT COUNT(
Id as id
) FROMt_test
这种语法在mysql执行是报错的, 因为gorm里对count逻辑:所以在不用到类似distinct什么情况下,所有sql一律生成 select count() from t_test ,不考虑复杂情况 所以我的解决方案我是想在这边执行Count的时候加个resultDb.Statement.Selects = nil // SelectCount 根据条件查询记录数量 func SelectCount[T any](q QueryCond[T], opts ...OptionFunc) (int64, *gorm.DB) { var count int64 resultDb := buildCondition(q, opts...) //fix 查询分页数量有列Select只有一个则生成sql不对问题 resultDb.Statement.Selects = nil resultDb.Count(&count) return count, resultDb }
这种感觉也是组件gorm的问题~~~~对各个驱动并没有完全匹配 主要我用的使用列别名转了,如果单个字段,列别名不转的话没有问题,在gorm执行count的时候select count(fieldName) from 表 这样sql执行是正确的。不过总体上gorm的count兼容问题?