Gorm: Tidak bisa mendapatkan gorm.ErrRecordNotFound saat menggunakan pointer untuk mengiris

Dibuat pada 1 Agu 2018  ·  3Komentar  ·  Sumber: go-gorm/gorm

Saya berharap itu bisa mendapat gorm.ErrRecordNotFound Jika tidak ada catatan yang ditemukan saat menggunakan pointer untuk mengiris. Dan setelah melacak kode saya mencatat bahwa https://github.com/jinzhu/gorm/blob/master/callback_query.go#L87 -L89 tambahkan isSlice nilai bool untuk memblokir pengaturan kesalahan.

Jadi bagaimana saya bisa tidak menemukan catatan database ketika saya menggunakan pointer untuk mengiris? Terima kasih.

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

Versi Go apa yang Anda gunakan ( go version )?

Terbaru

Basis data mana dan versinya yang Anda gunakan?

sqlite

Berikan program lengkap yang dapat dijalankan untuk mereproduksi masalah Anda. PENTING

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")
        }
    }

}

Komentar yang paling membantu

Setelah saya mencari masalah saya menemukan https://github.com/jinzhu/gorm/issues/228#issuecomment -281573321 Find a slice won't return error, bug find a struct will.

Bisakah menambahkan ini ke dokumen atau mempertimbangkan yang membuat konsistensi perilaku?

Semua 3 komentar

Setelah saya mencari masalah saya menemukan https://github.com/jinzhu/gorm/issues/228#issuecomment -281573321 Find a slice won't return error, bug find a struct will.

Bisakah menambahkan ini ke dokumen atau mempertimbangkan yang membuat konsistensi perilaku?

Ini benar-benar tidak terduga; find pada irisan juga harus mengembalikan kesalahan.

Contoh bagaimana kode nyata akan terlihat seperti sekarang:

        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

Digabungkan #2015, tutup.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat