数据插入时, 使用struct作为Data参数的默认值问题
linuxr opened this issue · 1 comments
linuxr commented
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 ?