目标:如果用户在软删除中被标记为已删除,则他的日历也应被标记为已删除。结构: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")问题:硬删除有效:用户和他的日历都被删除(记录消失了)db.Exec("Delete from users where id=3")软删除无法按预期工作:db.Where("id = ?", 3).Delete(&User{})通过软删除,用户表字段 => deleted_at 已过时。日历表=?deleted_at 为空有任何想法吗?
2 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
软删除意味着 gorm 不会删除您的数据。它只标记一个非零DeleteAt时间戳。数据库不直接支持。所以外键在这里没有作用。
这意味着您需要自己手动实现级联删除,如下所示:
func DeleteUser(db *gorm.DB, id int) error {
tx := db.Begin()
if tx.Where("id = ?", id).Delete(&User{}); tx.Error != nil {
tx.Rollback()
return tx.Error
}
// Changed this line
// if tx.Where("user_id = id", 3).Delete(&Calendar{}); tx.Error != nil {
if tx.Where("user_id = ?", id).Delete(&Calendar{}); tx.Error != nil {
tx.Rollback()
return tx.Error
}
return tx.Commit().Error
}
- 2 回答
- 0 关注
- 109 浏览
添加回答
举报
0/150
提交
取消