gohouse/gorose

数据插入时, 使用struct作为Data参数的默认值问题

linuxr opened this issue · 1 comments

data 插入时, 使用 struct 和 gorose.Data 时表现不一致

使用 struct 时

        db := model.DB()
        var todo = model.Todo{
                Id:       "xxxx",
                Name:   "xxxx",
                Finished: 0,
        }
        _, err := db.Table(todo.TableName()).Data(&todo).Insert()
        return err

Insert时有错误: "Error 1364: Field 'finished' doesn't have a default value"

使用 gorose.Data 时

        db := model.DB()
         _, err := db.Table(todo.TableName()).Data(gorose.Data{
              "id":       "xxxx",
              "name":     "xxx",
              "finished": 0,
        }).Insert()
        return err

可以成功插入数据.

model.Todo的定义如下:

package model

type Todo struct {
        Id       string `gorose:"id" json:"id"`
        Name     string `gorose:"name" json:"name"`
        Finished int    `gorose:"finished" json:"finished"`
}

func (t *Todo) TableName() string {
        return "Todo"
}

问题分析

如上代码, 当使用 struct 作为 Insert 的参数时, finished = 0 的时候, 生成的sql中把这个字段忽略了,
所以在 Insert 的时候报错, 'finished' 没有默认值

使用 gorose.Data 时则没有这个问题, 把 finished = 0 也插入了数据库
请问, 这是个bug, 还是特意用这种方式来忽略 int 类型field ?

@linuxr 这个问题文档有说明, execute操作会默认忽略掉类型的0值, 可以使用 extraCol方法解决