如果使用指向切片的指针时找不到记录,我希望可以得到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 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.
可以将此添加到文档中还是考虑使行为保持一致?
这完全出乎意料。 在切片上查找也应该返回错误。
真实代码现在看起来如何的示例:
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 ,关闭它。
最有用的评论
搜索问题后,我发现https://github.com/jinzhu/gorm/issues/228#issuecomment -281573321
Find a slice won't return error, bug find a struct will.
可以将此添加到文档中还是考虑使行为保持一致?