在 GORM 中,你可以使用 Updates 方法更新数据库记录并获取受影响的行数。以下是一个示例,演示如何更新用户的电子邮件并获取受影响的行数:
package main
import (
"fmt"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type User struct {
ID uint `gorm:"primaryKey"`
FirstName string `gorm:"size:255"`
LastName string `gorm:"size:255"`
Email string `gorm:"size:255;unique"`
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("Failed to connect to database.")
}
db.AutoMigrate(&User{})
affectedRows := updateUserEmail(db, 1, "new-email@example.com")
fmt.Printf("Number of affected rows: %d\n", affectedRows)
}
func updateUserEmail(db *gorm.DB, id uint, newEmail string) int64 {
var user User
result := db.Model(&user).Where("id = ?", id).Updates(map[string]interface{}{
"email": newEmail,
})
return result.RowsAffected
}
在这个示例中,我们定义了一个 updateUserEmail 函数,该函数接受数据库连接、用户 ID 和新的电子邮件地址作为参数。在函数内部,我们首先定义了一个 User 类型的变量 user。然后,我们使用 db.Model(&user) 指定要更新的模型,并使用 Where(“id = ?”, id) 语句添加筛选条件。接下来,我们调用 Updates 方法并传入一个包含要更新的字段的映射。在这个例子中,我们只更新 email 字段。
Updates 方法返回一个 gorm.DB 类型的值,该值包含 RowsAffected 字段。RowsAffected 字段表示受影响的行数,可以用来判断更新操作是否成功。如果 RowsAffected 大于 0,表示至少有一行受到影响,更新操作成功。如果 RowsAffected 等于 0,表示没有行受到影响,可能是因为没有找到具有指定 ID 的用户。