Gorm: ์Šฌ๋ผ์ด์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ gorm.ErrRecordNotFound๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 08์›” 01์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: go-gorm/gorm

์Šฌ๋ผ์ด์Šค์— ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฉด gorm.ErrRecordNotFound ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ถ”์  ์ฝ”๋“œ ํ›„ https://github.com/jinzhu/gorm/blob/master/callback_query.go#L87 -L89 ์˜ค๋ฅ˜ ์„ค์ •์„ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•ด isSlice bool ๊ฐ’์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ํฌ์ธํ„ฐ๋ฅผ ์Šฌ๋ผ์ด์Šค๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ๊ณ ๋งˆ์›Œ.

} else if scope.db.RowsAffected == 0 && !isSlice {
                scope.Err(ErrRecordNotFound)
}

์–ด๋–ค ๋ฒ„์ „์˜ Go๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ( go version )?

์ตœ์‹ 

์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

SQLite

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋ ค๋ฉด ์™„์ „ํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ์ค‘์š”ํ•œ

package main

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
    "fmt"
)

type Product struct {
    gorm.Model
    Code string
    Price uint
}

func main() {
    db, _ := gorm.Open("sqlite3", "test.db")
    defer db.Close()

    // Migrate the schema
    db.AutoMigrate(&Product{})

    // Create
    db.Create(&Product{Code: "L1212", Price: 1000})

    var products []Product
    // No record can be found
    if err:= db.Where(map[string]interface{}{"code": ""}).Find(&products).Error;err!=nil {
        if err == gorm.ErrRecordNotFound {
            //expect getting ErrRecordNotFound error
            fmt.Print("ErrRecordNotFound")
        }
    }

}

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ํ›„ https://github.com/jinzhu/gorm/issues/228#issuecomment -281573321 Find a slice won't return error, bug find a struct will. ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋ฌธ์„œ์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํ–‰๋™ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  3 ๋Œ“๊ธ€

๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ํ›„ https://github.com/jinzhu/gorm/issues/228#issuecomment -281573321 Find a slice won't return error, bug find a struct will. ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋ฌธ์„œ์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํ–‰๋™ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์ „ํ˜€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ์กฐ๊ฐ์—์„œ ์ฐพ๊ธฐ๋„ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์ฝ”๋“œ๊ฐ€ ํ˜„์žฌ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€์— ๋Œ€ํ•œ ์˜ˆ:

        var originalRecords []*Record
    err := db.
        Joins("JOIN records ON records.ext_id = external.id").
        Where(`external."key" = ?`, key).
        Find(&originalRecords).Error
    if err != nil {
        return nil, err
    }
        if len(originalRecords) == 0 {
             return nil, gorm.ErrRecordNotFound
        }
        return originalRecords, nil

๋ณ‘ํ•ฉ #2015, ๋‹ซ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰