GORM钩子
BeforeCreate
UpdateInstanceBillUsage 当前插入记录,错误 2023-08 2023-08-10 错误:Error 1366 (HY000): Incorrect decimal value: '' for column 'usage' at row 248
- 原因:用'' 插入只允许浮点的字段
- 解决:可以通过 BeforeCreate 验证异常字段值,并强制置为默认值
type InstanceBillItemsUsage struct {
gorm.Model
...
Usage *string `json:"Usage,omitempty"`
...
}
// BeforeCreate 钩子方法,在创建记录之前调用
func (u *InstanceBillItemsUsage) BeforeCreate(tx *gorm.DB) (err error) {
// 检查字段是否合法,如果不合法,设置为默认值
//rType := reflect.TypeOf(u.Usage)
//if rType.Kind() != reflect.Float32 || rType.Kind() != reflect.Float64 {
var v = "0.00"
if *u.Usage == "''" || u.Usage == nil || *u.Usage == "" {
u.Usage = &v // 设置默认值
}
return nil
}
其他解决思路:
- GORM设置默认值
这样,如果尝试插入空值,数据库将自动使用默认值,避免了错误。但这取决于业务逻辑是否允许这样做。
- 获取到异常值时,直接代码处理,不借助钩子
除了使用钩子进行验证,还可以使用go-playground/validator 进行更复杂验证