亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

軟刪除級聯不起作用

軟刪除級聯不起作用

Go
心有法竹 2023-03-29 15:10:46
目標:如果用戶在軟刪除中被標記為已刪除,則他的日歷也應被標記為已刪除。結構: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

}


查看完整回答
反對 回復 2023-03-29
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

Gorm 現在有一個Delete with Select功能。

db.Select("Calender").Delete(&user)


查看完整回答
反對 回復 2023-03-29
  • 2 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號