目標:如果用戶在軟刪除中被標記為已刪除,則他的日歷也應被標記為已刪除。結構: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 關注
- 150 瀏覽
添加回答
舉報
0/150
提交
取消