データベースを操作する場合、潜在的なエラーを適切に処理することが重要です。 GORM では、データベースからエンティティを削除することを目的とした Delete 関数で、同じ識別子を使用した複数の呼び出しでエラーが発生しないという特定の問題が発生します。
デフォルトでは、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>
この変更されたコードでは:
以上が行が見つからない場合に GORM でエンティティを削除するときにエラー処理を確実に行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。