在 GORM 中,你可以根据任何字段删除记录。要根据其他字段删除记录,你可以使用 Delete
方法,并传入一个包含要删除条件的结构体或使用 Where
方法指定条件。
示例代码:
假设你有一个 User
结构体,并想根据 Name
字段删除记录。
方法1:使用 Delete
方法并传入条件
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
ID uint
Name string
Age int
}
func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
// 根据Name字段删除记录
nameToDelete := "John Doe"
// 使用Delete方法传入条件
if err := db.Delete(&User{}, "name = ?", nameToDelete).Error; err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Record deleted successfully")
}
}
方法2:使用 Where
方法指定条件
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
ID uint
Name string
Age int
}
func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
// 根据Name字段删除记录
nameToDelete := "John Doe"
// 使用Where和Delete方法组合
if err := db.Where("name = ?", nameToDelete).Delete(&User{}).Error; err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Record deleted successfully")
}
}
解释:
-
方法1: 使用
Delete
方法时,可以传入查询条件(如"name = ?"
) 和参数(如nameToDelete
)。GORM 会生成对应的DELETE
SQL 语句。
db.Delete(&User{}, "name = ?", nameToDelete)
方法2: 使用 Where
方法可以更加灵活地指定删除条件。Where
方法设置查询条件后,再调用 Delete
方法来删除符合条件的记录。
db.Where("name = ?", nameToDelete).Delete(&User{})
注意:
- 在这两种方法中,删除操作会删除所有符合条件的记录。
- 如果你想删除多个条件组合下的记录,可以通过
AND
或OR
条件组合,或者在Where
方法中传递多个参数来实现。
例如,删除 Name
为 "John Doe"
并且 Age
为 30
的记录:
db.Where("name = ? AND age = ?", "John Doe", 30).Delete(&User{})