[gogf/gf]update方法报错请问怎么处理

2024-07-09 726 views
4

最新版本 v1.16.4

func testupdate()  {
    id := 72
    pass := 2
    entity, e := ai_sentence.Model.Where("id=?", id).One()
    if e != nil {
        g.Log().Line().Error(e)
    }

    entity.State = pass
    _, err := entity.Update()
    if err != nil {
        g.Log().Line().Error(err)
    } else {
    }
}

2021-07-20 14:27:22.713 [ERRO] sentence.go:121: sql: expected 8 arguments, got 9, UPDATE `ai_sentence` SET `delate`=0,`id`=72,`phone`='2088702302431853',`add_time`='2021-06-02 14:49:56',`update_time`='2021-06-02 14:49:56',`content`='今天晚上是您值班,请勿迟到,请认真填写各项表格,祝您工作顺利!',`state`=1 WHERE `id` IN (72)
Stack:

回答

4

clone后再update 试看看

1

不行

7

@tianxia0079 用最新的master分支试试,不行的话给个我可以运行的代码。

8

@gqcn Desktop.zip 我在2021年8月2日10:20试了最新的1.16.4,还是报一样的错误。

压缩包里有表脚本,自动 生产的代码,还有一个可以运行的测试用例,麻烦看下啥情况。 补充:表里没有数据,请随便填一条就可以,id设置为72

4

我看了你的代码,你使用的是老的model方式,新版本已经不支持,我就不花时间去排查了。建议你升级为dao方式。或者保留使用老版本,在下一个版本升级为dao

9

@gqcn

  1. 为什么不支持model方式了,是有性能问题吗,有没有详细说明的地方,想了解一下原因 2.新版本不支持,应该彻底删除,代码编译也不报错,但是运行报错,体验很差,如果真有问题,应该彻底删除
2

主要原因是CLI生成的旧版model代码扩展性和维护性不佳,框架新增了方法CLI工具模板也要新增修改。新版本改为了继承嵌套方式,并且开发者可以使用Scan方法将查询结果绑定到任意的可接收对应参数的结构体上,而不是只依靠Entity对象。

这个model的代码是cli工具生成的,框架控制不了。新版本cli工具已经删除了该命令,但是已经生成的model代码只有开发者升级为dao方式才能使用最新的goframe框架版本。