Gorm: Problema com Find () e First ()

Criado em 22 nov. 2014  ·  3Comentários  ·  Fonte: go-gorm/gorm

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.

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:

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

Todos 3 comentários

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{})
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

littletwolee picture littletwolee  ·  3Comentários

fieryorc picture fieryorc  ·  3Comentários

alanyuen picture alanyuen  ·  3Comentários

Quentin-M picture Quentin-M  ·  3Comentários

superwf picture superwf  ·  3Comentários