Mysql 软删除级联不工作
目标:如果用户在软删除中被标记为已删除,则其日历也应被标记为已删除 结构:Mysql 软删除级联不工作,mysql,go,go-gorm,Mysql,Go,Go Gorm,目标:如果用户在软删除中被标记为已删除,则其日历也应被标记为已删除 结构: type User struct { gorm.Model Username string FirstName string LastName string Calendar Calendar } type Calendar struct { gorm.Model Name string UserID uint } db.Model(&
type User struct {
gorm.Model
Username string
FirstName string
LastName string
Calendar Calendar
}
type Calendar struct {
gorm.Model
Name string
UserID uint
}
db.Model(&Calendar{}).AddForeignKey("user_id", "users(id)", "CASCADE","CASCADE")
约束:
type User struct {
gorm.Model
Username string
FirstName string
LastName string
Calendar Calendar
}
type Calendar struct {
gorm.Model
Name string
UserID uint
}
db.Model(&Calendar{}).AddForeignKey("user_id", "users(id)", "CASCADE","CASCADE")
问题:
type User struct {
gorm.Model
Username string
FirstName string
LastName string
Calendar Calendar
}
type Calendar struct {
gorm.Model
Name string
UserID uint
}
db.Model(&Calendar{}).AddForeignKey("user_id", "users(id)", "CASCADE","CASCADE")
硬删除有效:用户和他的日历都被删除(记录消失)
软删除不起到预期的作用:
使用软删除
有什么想法吗?软删除意味着gorm不会删除您的数据。它只标记非零的
DeleteAt
时间戳。数据库不直接支持这一点。所以外键在这里没有作用
这意味着您需要自己手动实现级联删除,如下所示:
func DeleteUser(db*gorm.db,id int)错误{
tx:=db.Begin()
如果tx.Where(“id=?”,id).Delete(&User{});tx.Error!=nil{
tx.回滚()
返回发送错误
}
//换了这条线
//如果tx.Where(“user_id=id”,3)。删除(&Calendar{});tx.Error!=nil{
if tx.Where(“user_id=?”,id).Delete(&Calendar{});tx.Error!=nil{
tx.回滚()
返回发送错误
}
返回tx.Commit()。错误
}