Ich bin mir nicht sicher, ob dieses Problem mit Ihrem Code oder Ihrer Dokumentation zusammenhängt.
Ich gehe auch davon aus, dass Sie GORM basierend auf Ruby On Rails oder PHP-Laravel entwickelt haben, weshalb ich glaube, dass es einen Fehler gibt.
http://laravel.com/docs/4.2/eloquent
Ich erwarte nicht, dass Sie allen meinen Vorschlägen zustimmen, weil Sie versuchen, Find() und First() dazu zu bringen, die 4 Befehle in Laravel auszuführen: All(), First(), Find(), Get().
Der Nachteil ist jedoch, dass Ihre Methode IMMER Slice zurückgibt, auch wenn es bequemer ist, One Struct (ohne Slice) zu erhalten, wenn Sie ein Ergebnis WOLLEN und ERWARTEN.
Typ Kundenstruktur {
Id uint32 gorm:"column:id; primary_key:yes"
Access_token-String gorm:"column:access_token"
}
func (c Kunde) TableName() string {
"Kunden" zurückgeben
}
func MyMiddleware(rw http.ResponseWriter, r *http.Request) {
// u := []Kunde{}
u := &Kunde{}
db, _ := gorm.Open("mysql", "root:@/main")
// db.First(&u, 5)
// db.First(&u)
// db.Find(&u, 5)
db.Find(&u)
}
Das ist das Problem:
ERSTER BEFEHL:
Dies sollte das erste Ergebnis aus der Sammlung aller zurückgegebenen Ergebnisse zurückgeben. (ob es zusätzliche WHERE-Parameter gibt oder nicht).
Es sollte das EINE Ergebnis in &Customer{} parsen und KEIN Array mit einem Ergebnis darin enthalten.
Derzeit funktioniert es nicht, wenn &u kein Verweis auf ein Slice ist. &u sollte auf &Kunde{} verweisen und nicht auf &[]Kunde{}.
Diese Funktion sollte auch NIEMALS einen zusätzlichen Parameter für den Primärschlüssel akzeptieren. Dafür gibt es die FIND-Funktion.
FINDE BEFEHL:
Wenn dem Find-Befehl ein Primärschlüssel zugewiesen wird, sollte er kein Slice zurückgeben. Es sollte auch IMMER einen Primärschlüsselwert erwarten.
Wenn Sie alle Werte haben möchten, verwenden Sie "ALL" COMMAND. db.ALL(&u) wobei &u=[]Kunde{}
http://daylerees.com/codebright/eloquent-queries
http://laravel.com/docs/4.2/queries
ALLE BEFEHLE:
Dies sollte in Ihre Bibliothek aufgenommen werden. Das würde alle Werte zurückgeben.
db.All(&u), wobei &u=[]Kunde{}
BEFEHL ERHALTEN:
Dies sollte in Ihre Bibliothek aufgenommen werden. Dies würde ein ARRAY aller Werte zurückgeben, auch nachdem Sie WHERE-Einschränkungen gesetzt haben.
Hallo @pjebs
Obwohl ich die Ideen von ActiveRecord gestohlen habe, funktioniert es nicht genau so, sondern funktioniert wie folgt:
db.First(&User{}) // first user, sort by primary key
db.First(&[]User{}) // find the first user, and put it into the array
db.Find(&User{}) // first user
db.Find(&[]User{}) // find all users
// find records with conditions
db.First(&User{}, 123)
db.First(&User{}, "name = ?", "hello")
db.Find(&User{}, "name = ?", "hello")
db.Where("name = ?", "hello").First(&User{})
db.Where("name = ?", "hello").Find(&User{})
Hilfreichster Kommentar
Hallo @pjebs
Obwohl ich die Ideen von ActiveRecord gestohlen habe, funktioniert es nicht genau so, sondern funktioniert wie folgt: