gormの公式に記載があるが、レコードを1件取得する関数及びエラーハンドリングについて備忘録として残す。
用意されている関数
- First()
- Last()
- Take()
First()関数について
db.First(&user)
// SELECT * FROM users ORDER BY id LIMIT 1;
条件に合致するレコードを「id」で昇順ソートし、ソートされた最初の1件を取得する。
Last()関数について
db.Last(&user)
// SELECT * FROM users ORDER BY id DESC LIMIT 1;
条件に合致するレコードを「id」で降順ソートし、ソートされた最初の1件を取得する
Take()関数について
db.Take(&user)
// SELECT * FROM users LIMIT 1;
順序指定なしで1件のレコードを取得する
レコードが見つからなかった場合
First()、Take()、Last()関数で取得するレコードがなかった場合、ErrRecordNotFound
を返却する
エラーハンドリングの例
if err != nil {
if err == gorm.ErrRecordNotFound {
fmt.Println("レコードが見つかりません")
}
fmt.Println("エラーが発生しました。")
}
まとめ
First()、Last()ではErrRecordNotFound
が発生するが、Find()などのメソッドではレコードがなくてもエラーが発生しないため、違いを把握した上でしっかりとエラーハンドリングできるようにしたい。