Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 软删除级联不工作_Mysql_Go_Go Gorm - Fatal编程技术网

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")
硬删除有效:用户和他的日历都被删除(记录消失)

软删除不起到预期的作用:

使用软删除

  • 用户表字段=>deleted_at已注明日期
  • 日历表=?已删除的位置为空

  • 有什么想法吗?

    软删除意味着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()。错误
    }