gin-vue-admin icon indicating copy to clipboard operation
gin-vue-admin copied to clipboard

【建议】 service.go.tpl Update 方法忽略 id 字段

Open yann0917 opened this issue 4 years ago • 2 comments

建议 service.go.tpl 模板文件中 Update 方法忽略 id 字段,否则更新的时候很有可能更改主键

If you only want to update or ignore some fields when updating, you could use Select, Omit

before

func Update{{.StructName}}({{.Abbreviation}} *model.{{.StructName}}) (err error) {
	err = global.GVA_DB.Save({{.Abbreviation}}).Error
	return err
}

after

func Update{{.StructName}}({{.Abbreviation}} *model.{{.StructName}}) (err error) {
	err = global.GVA_DB.Omit("id").Save({{.Abbreviation}}).Error
	return err
}

yann0917 avatar Jul 10 '20 10:07 yann0917

这个隐患可能会在用户修改了更新方法的时候存在,如果直接调用save方法,它会按照主键也就是当前的id进行查找,自动化代码应该不会出现错误覆盖主键的情况。 不过这里可以作为一个,提醒供大家参考,此issue可挂tag保留,感谢!

piexlmax avatar Jul 11 '20 05:07 piexlmax

这个隐患可能会在用户修改了更新方法的时候存在,如果直接调用save方法,它会按照主键也就是当前的id进行查找,自动化代码应该不会出现错误覆盖主键的情况。 不过这里可以作为一个,提醒供大家参考,此issue可挂tag保留,感谢!

是的,我在复用 Update 这个方法的时候,发现要传 id ,否则因为没有 id (原记录 id 为零值)会插入新的数据。

yann0917 avatar Jul 11 '20 05:07 yann0917