Gorm: Gorm.ErrRecordNotFound kann nicht abgerufen werden, wenn der Zeiger zum Slicen verwendet wird

Erstellt am 1. Aug. 2018  ·  3Kommentare  ·  Quelle: go-gorm/gorm

Ich gehe davon aus, dass gorm.ErrRecordNotFound erhalten werden kann, wenn beim Verwenden des Zeigers zum Slicen kein Datensatz gefunden wird. Und nach dem Ablaufverfolgungscode habe ich festgestellt, dass https://github.com/jinzhu/gorm/blob/master/callback_query.go#L87 -L89 den Bool isSlice zur Blockfehlereinstellung hinzufügt.

Wie kann ich also keinen Datenbankeintrag finden, wenn ich den Zeiger zum Slicen verwende? Vielen Dank.

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

Welche Version von Go verwenden Sie ( go version )?

Neueste

Welche Datenbank und deren Version verwenden Sie?

sqlite

Bitte stellen Sie ein vollständiges lauffähiges Programm bereit, um Ihr Problem zu reproduzieren. WICHTIG

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

}

Hilfreichster Kommentar

Nachdem ich nach dem Problem gesucht hatte, fand ich https://github.com/jinzhu/gorm/issues/228#issuecomment -281573321 Find a slice won't return error, bug find a struct will.

Kann dies zum Dokument hinzugefügt oder in Betracht gezogen werden, um das Verhalten konsistent zu machen?

Alle 3 Kommentare

Nachdem ich nach dem Problem gesucht hatte, fand ich https://github.com/jinzhu/gorm/issues/228#issuecomment -281573321 Find a slice won't return error, bug find a struct will.

Kann dies zum Dokument hinzugefügt oder in Betracht gezogen werden, um das Verhalten konsistent zu machen?

Das ist völlig unerwartet; find on a Slice sollte ebenfalls den Fehler zurückgeben.

Ein Beispiel dafür, wie echter Code jetzt aussehen würde:

        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

Zusammengeführt #2015, schließen Sie es.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

leebrooks0 picture leebrooks0  ·  3Kommentare

koalacxr picture koalacxr  ·  3Kommentare

bramp picture bramp  ·  3Kommentare

youtwo123 picture youtwo123  ·  3Kommentare

corvinusy picture corvinusy  ·  3Kommentare