Gorm: Problema con Find () y First ()

Creado en 22 nov. 2014  ·  3Comentarios  ·  Fuente: go-gorm/gorm

No estoy seguro de si este problema está relacionado con su código o documentación.
También supongo que diseñó GORM basado en Ruby On Rails o PHP-Laravel, por lo que creo que hay un error.

http://laravel.com/docs/4.2/eloquent

No espero que esté de acuerdo con todas mis sugerencias porque está tratando de hacer que Find () y First () logren los 4 comandos en Laravel: All (), First (), Find (), Get ().

Pero la desventaja es que su método SIEMPRE devuelve un segmento incluso si es más conveniente obtener una estructura (sin segmento) cuando DESEA y ESPERA un resultado.

Comentario más útil

Hola @pjebs

Aunque robé las ideas de ActiveRecord, no funciona exactamente igual, pero funciona como a continuación:

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 comentarios

tipo Estructura del cliente {
Id uint32 gorm:"column:id; primary_key:yes"
Cadena de Access_token gorm:"column:access_token"
}

func (c Cliente) TableName () cadena {
devolver "clientes"
}

func 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 es el problema:

PRIMER MANDO:
Esto debería devolver el primer resultado de la colección de todos los resultados que se devuelven. (ya sea que haya parámetros WHERE adicionales o no).
Debe analizar el resultado UNO en & Cliente {} y NO tener una matriz con un resultado allí.

Actualmente no funciona cuando & u no es una referencia a un segmento. & u debe apuntar a & Customer {} y no a & [] Customer {}.

Esta función NUNCA debería aceptar un parámetro adicional para la clave principal. Para eso es la función ENCONTRAR.

ENCONTRAR COMANDO:
Cuando el comando Buscar recibe una clave principal, no debe devolver un segmento. También debe esperar SIEMPRE un valor de clave principal.

Si desea todos los valores, utilice el COMANDO "TODOS". db.ALL (& u) donde & u = [] Cliente {}

http://daylerees.com/codebright/eloquent-queries
http://laravel.com/docs/4.2/queries

TODO EL MANDO:
Esto debería estar incluido en su biblioteca. Eso devolvería todos los valores.

db.All (& u), donde & u = [] Cliente {}

OBTENGA EL MANDO:
Esto debería estar incluido en su biblioteca. Esto devolvería un ARRAY de todos los valores, incluso después de poner restricciones WHERE.

Hola @pjebs

Aunque robé las ideas de ActiveRecord, no funciona exactamente igual, pero funciona como a continuación:

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{})
¿Fue útil esta página
0 / 5 - 0 calificaciones