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 評価