使用Golang+Supabase为PostgreSQL链式多过滤时In方法报错如何解决?
问题解决:Supabase Go客户端多条件过滤错误
错误原因
你错误地将过滤方法In()调用在了接收查询结果的[]any类型变量results上,results只是用来存储最终数据的数组,根本没有In方法。In()是Supabase Go客户端**查询构建器(supa.QueryBuilder)**的方法,必须在构建查询逻辑的阶段调用,而不是等到查询执行完成后再处理。
修正后的代码
func GetCardsByAdvanceSearch(supabase *supa.Client) gin.HandlerFunc { fn := func(context *gin.Context) { sets, isSets := context.GetQueryArray("setCode") colors, isColors := context.GetQueryArray("color") var results []any // 先初始化查询构建器,基础逻辑是从cards表查询所有字段 query := supabase.DB.From("cards").Select("*") // 根据请求参数链式添加过滤条件 if isColors { query = query.In("colors", colors) } if isSets { query = query.In("set_code", sets) } // 所有条件拼接完成后,执行查询并获取结果 err := query.Execute(&results) if err != nil { panic(err) } context.JSON(http.StatusOK, gin.H{ "Results": results, }) } return gin.HandlerFunc(fn) }
关键说明
- 先通过
supabase.DB.From("cards").Select("*")拿到查询构建器实例,所有过滤、排序等操作都要基于这个实例链式调用 - 每次调用
In()或其他查询方法时,会返回一个新的QueryBuilder实例,必须重新赋值给query变量才能保留条件 - 所有条件拼接完成后,再调用
Execute()执行查询,将结果写入results变量
内容的提问来源于stack exchange,提问作者TeflonTrout
相关产品推荐
相关产品推荐

