书接上回,上回写道,GORM的查询和创建(插入数据),这回继续些增删改查的改和删的操作。
文章目录
更新update
修改单个列
当使用Update更新单个列时,它需要有任何条件,否则会引发错误ErrMissingWhereClause,详情查看Block Global Updates了解详细信息。当使用Model方法并且它的值有一个主值时,主键将被用来构建条件。
根据条件修改
db.Model(&User{
}).Where("active = ?", true).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE active=true;
当用户ID为111
// User's ID is `111`:
db.Model(&user).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111;
更新条件和模型值
db.Model(&user).Where("active = ?", true).Update("name", "hello")
// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111 AND active=true;
修改多个列
Updates支持使用struct或map[string]接口{}进行更新。
注意:
当使用struct进行更新时,默认情况下只更新非零字段
使用' struct '更新属性,将只更新非零字段
db.Model(&user).Updates(User{
Name: "hello", Age: 18, Active: false})
// UPDATE users SET name='hello', age=18, updated_at = '2013-11-17 21:34:10' WHERE id = 111;
使用map来更新属性,或者使用Select来指定要更新的字段这种情况下
使用' map '更新属性
db.Model(&user).Updates(map[string]interface{
}{
"name": "hello", "age": 18, "active": false})
// UPDATE users SET name='hello', age=18, active=false, updated_at='2013-11-17 21:34:10' WHERE id=111;
修改选定字段
使用' map '更新字段 Select
db.Model(&user).Select("name").Updates(map[string]interface{
}{
"name": "hello", "age": 18, "active": false})
// UPDATE users SET name='hello' WHERE id=111;
使用' map '更新字段 Qmit
db.Model(&user).Omit("name").Updates(map[string]interface{
}{
"name": "hello", "age": 18, "active": false})
// UPDATE users SET age=18, active=false, updated_at='2013-11-17 21:34:10' WHERE id=111;
使用Struct 跟新字段
db.Model(&user).Select("Name", "Age").Updates(User{
Name: "new_name", Age: 0})
// UPDATE users SET name='new_name', age=0 WHERE id=111;
使用Struct 更新所有字段包括非0字段
db.Model(&user).Select("*").Updates(User{
Name: <

本文详细介绍了如何在GORM中进行单列、多列和特定字段的更新操作,包括使用SQL表达式、根据子查询更新、Hook回调、防止全局更新以及处理返回数据。同时提到了Save方法的使用和注意事项。
最低0.47元/天 解锁文章
2678

被折叠的 条评论
为什么被折叠?



