Home  >  Article  >  Backend Development  >  How to chain multiple filters on Postgres database using Golang and supabase?

How to chain multiple filters on Postgres database using Golang and supabase?

王林
王林forward
2024-02-09 15:03:08496browse

如何使用 Golang 和 supabase 在 Postgres 数据库上链接多个过滤器?

php Xiaobian Yuzai today introduces a method of linking multiple filters on the Postgres database using Golang and supabase. During the development process, we often need to query and filter the database, and the combination of multiple filters can meet our needs more flexibly. By combining the Golang programming language and supabase database service, we can easily achieve this goal. This article will provide you with a detailed analysis of the specific implementation methods to help you better apply them in actual projects.

Question content

So I have a supabase postgres database setup and I'm trying to use gin to setup the API for that database. I'm using nedpals/supabase-go to connect to my supabase client. I'm trying to chain multiple filters based on request parameters like this:

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

        err := supabase.DB.From("cards").Select("*").Execute(&results)

        if(isColors) { results.In("colors", colors)}
        if(isSets) { results.In("set_code", sets)}

        if err != nil {
            panic(err)
        }
        context.JSON(http.StatusOK, gin.H{
            "Results": results,
        })
    }
    return gin.HandlerFunc(fn)
}

This is based on the Supabase JS documentation which allows multiple "In" filters. But when I try to do this I keep getting errors where results.In undefined (type []any has no field or method In) basically In is not applicable to results method, even though it should be based on documentation. p>

Please help haha

Solution

Your current code is actually doing the following:

var results []any
results.In("colors", colors)

results is a slice, so, as the error says, "There is no field or method In".

In Need to run against the filter before executing the query; something like the following (untested!):

srb := supabase.DB.From("cards").Select("*")
if(isColors) {srb.In("colors", colors)}
if(isSets) {srb.In("set_code", sets)}

var results []any
err := srb.Execute(&results)

The above is the detailed content of How to chain multiple filters on Postgres database using Golang and supabase?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete