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 でこの関数を複数回呼び出しても、最初に 1 行しか削除しなかったにもかかわらず、エラーが発生しました。これは、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 中国語 Web サイトの他の関連記事を参照してください。