go v1.18 gf v2.1.2
pgsql数据库的int8[]类型字段,gen dao后生成entity结构对应为[]int64 目前查询DB时数据转换没有问题(现有contrib已支持),但是在insert和update时,执行sql会报解析错误。
原因是slice类型的数据,会经过json.Marshal后再拼在sql中(code),但pgsql的int8[]类型字段,接受的是 {1,2,3} 大括号包着的数据,而json编码后是[1,2,3]中括号
暂时解决办法是自定义结构重写生成的entity中的[]int64类型字段,自定义结构实现driver.Valuer接口
@gqcn 帮忙看看框架是否能支持这个场景?
复现 pgsqlCREATE TABLE public.test_slice (
    ids _int8 NULL
);
INSERT INTO public.test_slice (ids) VALUES ('{1,2}');package main
import (
    _ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
    _ "github.com/lib/pq"
    "github.com/gogf/gf/v2/frame/g"
    "github.com/gogf/gf/v2/os/gctx"
    "github.com/gogf/gf/v2/util/gutil"
)
type Result struct {
    IDs []int64
}
func main() {
    ctx := gctx.New()
    var res Result
    _ = g.DB().Model("test_slice").Ctx(ctx).Scan(&res)
    gutil.DumpWithType(res)
    data := Result{
        IDs: []int64{3, 4},
    }
    if _, err := g.DB().Model("test_slice").Ctx(ctx).Insert(data); err != nil {
        gutil.DumpWithType(err)
    }
}2022-08-01 17:55:27.296 [DEBU] {e04c685cf72f07178b559a6801f35276} [ 25 ms] [default] [rows:1  ] SELECT "ids" FROM "test_slice" LIMIT 1
main.Result(1) {
    IDs: []int64(2) [
        int64(1),
        int64(2),
    ],
}
2022-08-01 17:55:27.325 [ERRO] {e04c685cf72f07178b559a6801f35276} [ 29 ms] [default] [rows:0  ] INSERT INTO "test_slice"("ids") VALUES('[3,4]')
Error: pq: malformed array literal: "[3,4]"