GORMでレコードなし判定を検知したい
はじめに
GORMでクエリを発行して該当するレコードがない場合でも実行自体は問題なくできるのですができれば空の配列やnilを返すのではなくレコードなしを検知して適切な処理がしたいですよね?今日はその方法を紹介します。
方法
以下のようにすれば検知できます!
if err := db.First(&User).Error; errors.Is(err, gorm.ErrRecordNotFound) {
fmt.Println("error detected! ErrRecordNotFound")
}
クエリに関してですがuserテーブルの最初のレコードを取りに行っているだけです。その後に「.Error」を追加しerr変数で受け取っています。その後にエラーの種類を調べてレコードが見つからないというエラーであれば検知します!
(参照 : https://gorm.io/docs/error_handling.html)
注意
注意ですが検索用のメソッドにFindを使っている場合はレコードなしを検知できません。その場合エラーが出ずレコードがない場合であってもエラーが出ません。First,Last,Takeの場合は検知可能です。
↑で示したコードのFirstをFindに置き換えるだけです。有害な文字列として扱われているのか分かりませんがなぜかそのコードを書くと記事が保存できないので書きません。
(参照 : https://gorm.io/docs/query.html#Retrieving-a-single-object)
赤の線が引いてあるノートのような箇所に書いています。
この記事が気に入ったらサポートをしてみませんか?