Je ne sais pas si ce problème vient de votre code ou de votre documentation.
Je suppose également que vous avez conçu GORM basé sur Ruby On Rails ou PHP-Laravel, c'est pourquoi je pense qu'il y a une erreur.
http://laravel.com/docs/4.2/eloquent
Je ne m'attends pas à ce que vous soyez d'accord avec toutes mes suggestions car vous essayez de faire en sorte que Find() et First() accomplissent les 4 commandes de Laravel: All(), First(), Find(), Get().
Mais l'inconvénient est que votre méthode renvoie TOUJOURS une tranche même s'il est plus pratique d'obtenir One Struct (sans tranche) lorsque vous VOULEZ et ATTENDEZ un résultat.
type Structure client {
Id uint32 gorm:"column:id; primary_key:yes"
Chaîne de jeton d'accès gorm:"column:access_token"
}
func (c Client) NomTable() chaîne {
retour "clients"
}
func MyMiddleware (rw http.ResponseWriter, r *http.Request) {
// u := []Client{}
u := &Client{}
db, _ := gorm.Open("mysql", "root:@/main")
// db.First(&u, 5)
// db.First(&u)
// db.Find(&u, 5)
db.Find(&u)
}
C'est le problème:
PREMIÈRE COMMANDE :
Cela devrait renvoyer le premier résultat de la collection de tous les résultats renvoyés. (qu'il y ait des paramètres WHERE supplémentaires ou non).
Il devrait analyser le résultat UN dans &Customer{} et PAS un tableau avec un résultat là-dedans.
Actuellement, cela ne fonctionne pas lorsque &u n'est pas une référence à une tranche. &u doit pointer sur &Customer{} et non sur &[]Customer{}.
Cette fonction ne doit également JAMAIS accepter un paramètre supplémentaire pour la clé primaire. C'est à cela que sert la fonction FIND.
TROUVER LA COMMANDE :
Lorsque la commande Find reçoit une clé primaire, elle ne doit pas renvoyer de tranche. Il doit également TOUJOURS s'attendre à une valeur de clé primaire.
Si vous voulez toutes les valeurs, utilisez la COMMANDE "TOUS". db.ALL(&u) où &u=[]Client{}
http://daylerees.com/codebright/eloquent-queries
http://laravel.com/docs/4.2/queries
TOUTES LES COMMANDES :
Cela devrait être inclus dans votre bibliothèque. Cela renverrait toutes les valeurs.
db.All(&u), où &u=[]Client{}
OBTENIR LA COMMANDE :
Cela devrait être inclus dans votre bibliothèque. Cela renverrait un ARRAY de toutes les valeurs, y compris après avoir mis des contraintes WHERE.
Bonjour @pjebs
Bien que j'aie volé les idées d'ActiveRecord, cela ne fonctionne pas exactement comme cela, mais fonctionne comme ci-dessous :
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{})
Commentaire le plus utile
Bonjour @pjebs
Bien que j'aie volé les idées d'ActiveRecord, cela ne fonctionne pas exactement comme cela, mais fonctionne comme ci-dessous :