在 GORM 應用程式中,嘗試刪除不存在的行不會被識別為錯誤。為了確保正確的錯誤處理,必須檢查受影響的行數。
考慮以下 DeleteCategory 函數:
<code class="golang">var db *gorm.DB func DeleteCategory(id uint) error { var category Category category.ID = id result := db.Delete(&category) fmt.Println("result.Error: ", result.Error) return result.Error }</code>
使用相同的 id 多次呼叫此函數不會產生錯誤,儘管第一次只刪除一行。這是因為 SQL 標準不認為刪除不存在的行是錯誤。
要修正此問題,請新增對 RowsAffected 欄位的檢查:
<code class="golang">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>
透過此修改,函數將傳回如果指定 id 的行不存在,則會出錯。
以上是如何處理 GORM 的刪除功能中不存在的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!