flipped-aurora / gin-vue-admin

🚀Vite+Vue3+Gin拥有AI辅助的基础开发平台,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器、表单生成器和可配置的导入导出等开发必备功能。
http://demo.gin-vue-admin.com/
Apache License 2.0
21.58k stars 6.38k forks source link

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

Open yann0917 opened 4 years ago

yann0917 commented 4 years ago

建议 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 commented 4 years ago

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

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