首頁 > 後端開發 > Golang > 主體

如何確保在 GORM 中刪除實體時未找到行時的錯誤處理?

Linda Hamilton
發布: 2024-10-26 18:02:29
原創
442 人瀏覽過

How to Ensure Error Handling During Entity Deletion in GORM when Rows are Not Found?

GORM 中實體刪除期間的錯誤處理

使用資料庫時,優雅地處理潛在錯誤至關重要。在 GORM 中,旨在從資料庫中刪除實體的刪除函數會出現一個特定問題,即具有相同標識符的多個呼叫不會觸發錯誤。

預設行為

透過預設情況下,GORM 不會將嘗試刪除資料庫中不存在的行視為錯誤。因此,在這種情況下,即使刪除實體失敗,Delete 函數只會傳回 nil。

辨識根本原因

此行為源自於 GORM 遵循 SQL 標準的事實,它沒有將刪除不存在的行定義為錯誤。因此,當您嘗試刪除不存在的行時,GORM 本質上不會拋出錯誤。

自訂錯誤處理

如果您在嘗試刪除不存在的行時需要傳回錯誤如果行不存在,您必須手動檢查刪除函數結果的 RowsAffected 欄位。以下是修改程式碼的方法:

<code class="go">func DeleteCategory(id uint) error {
    c := Category{ID: id}

    db := db.Delete(&c)
    if db.Error != nil {
        return db.Error
    } else if db.RowsAffected < 1 {
        return fmt.Errorf("row with id=%d cannot be deleted because it doesn't exist", id)
    }

    return nil
}</code>
登入後複製

在此修改後的程式碼中:

  • 我們首先檢查在執行刪除函數期間可能發生的任何其他錯誤。
  • 如果 db.Error 為 nil,我們檢查 RowsAffected 欄位。如果小於 1,則表示沒有行受到影響,表示給定 id 的行不存在。
  • 在這種情況下,我們會傳回一條自訂錯誤訊息來指示操作失敗。

以上是如何確保在 GORM 中刪除實體時未找到行時的錯誤處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!