Não tenho certeza se o problema é com seu código ou documentação.
Também presumo que você projetou o GORM baseado em Ruby On Rails ou PHP-Laravel, por isso acredito que haja um erro.
http://laravel.com/docs/4.2/eloquent
Não espero que você concorde com todas as minhas sugestões porque está tentando fazer Find () e First () cumprir os 4 comandos do Laravel: All (), First (), Find (), Get ().
Mas a desvantagem é que seu método SEMPRE retorna fatia, mesmo se for mais conveniente obter Uma Struct (sem fatia) quando você QUER e ESPERAR um resultado.
tipo Customer struct {
Id uint32 gorm:"column:id; primary_key:yes"
Cadeia de acesso_token gorm:"column:access_token"
}
função (c Customer) TableName () string {
retornar "clientes"
}
função MyMiddleware (rw http.ResponseWriter, r * http.Request) {
// u: = [] Cliente {}
u: = & Cliente {}
db, _ := gorm.Open("mysql", "root:@/main")
// db.First(&u, 5)
// db.First(&u)
// db.Find(&u, 5)
db.Find(&u)
}
Este é o problema:
PRIMEIRO COMANDO:
Isso deve retornar o primeiro resultado da coleção de todos os resultados que estão sendo retornados. (se existem parâmetros WHERE extras ou não).
Deve analisar o resultado UM em & Customer {} e NÃO ter uma matriz com um resultado lá.
Atualmente, ele não funciona quando & u não é uma referência a uma fatia. & u deve apontar para & Cliente {} e não & [] Cliente {}.
Esta função também NUNCA deve aceitar um parâmetro extra para a chave primária. É para isso que serve a função FIND.
ENCONTRAR COMANDO:
Quando o comando Find recebe uma chave primária, ele não deve retornar uma fatia. Ele também deve SEMPRE esperar um valor de chave primária.
Se você quiser todos os valores, use o COMANDO "ALL". db.ALL (& u) onde & u = [] Cliente {}
http://daylerees.com/codebright/eloquent-queries
http://laravel.com/docs/4.2/queries
TODOS OS COMANDOS:
Isso deve ser incluído em sua biblioteca. Isso retornaria todos os valores.
db.All (& u), onde & u = [] Cliente {}
OBTER COMANDO:
Isso deve ser incluído em sua biblioteca. Isso retornaria um ARRAY de todos os valores, incluindo depois de colocar as restrições WHERE.
Olá @pjebs
Embora eu tenha roubado as ideias do ActiveRecord, ele não funciona exatamente como está, mas funciona da seguinte maneira:
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{})
Comentários muito úteis
Olá @pjebs
Embora eu tenha roubado as ideias do ActiveRecord, ele não funciona exatamente como está, mas funciona da seguinte maneira: