GORM 削除エラーの処理
Go では、GORM ライブラリを使用してデータベース操作を実行するのが一般的です。 GORM の機能の 1 つは、データベースからレコードを削除できることです。ただし、削除中にエラーが発生する可能性があり、それらを適切に処理することが重要です。
GORM を使用してデータベースからカテゴリを削除する次の関数を検討してください:
<code class="go">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 を持つデータベース内の行。行が正常に削除されると、GORM は result.Error で nil を返します。ただし、エラーが発生した場合、GORM は result.Error.
で nil も返します。このエラー情報の欠如が問題となる可能性がある特定のシナリオの 1 つは、存在しない行を削除しようとする場合です。 GORM はこれが成功した操作であると見なすため (影響を受ける行がないため)、result.Error で nil を返します。このような場合、レコードがないために削除試行が失敗したことを示すエラーを返す方が適切な場合があります。
この問題を解決するには、GORM 結果の RowsAffected フィールドをチェックして、行は削除されました。影響を受けた行がゼロの場合は、指定された ID を持つレコードがデータベースに存在しないことを意味し、適切なエラー メッセージを返すことができます。 DeleteCategory 関数の更新バージョンは次のとおりです。
<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>
この変更により、関数は指定されたレコードが存在しない場合を正しく処理し、明確なメッセージを含むエラーを返すようになりました。
以上がレコードが存在しない場合の GORM 削除エラーを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。