我不确定这个问题是否与您的代码或文档有关。
我还假设您基于 Ruby On Rails 或 PHP-Laravel 设计了 GORM,这就是我认为存在错误的原因。
http://laravel.com/docs/4.2/eloquent
我不希望你同意我的所有建议,因为你试图让 Find() 和 First() 完成 Laravel 中的 4 个命令:All()、First()、Find()、Get()。
但缺点是您的方法总是返回切片,即使在您想要和期望一个结果时获得一个结构(没有切片)更方便。
类型客户结构{
id uint32 gorm:"column:id; primary_key:yes"
Access_token 字符串gorm:"column:access_token"
}
func (c Customer) TableName() string {
回报“客户”
}
func MyMiddleware(rw http.ResponseWriter, r *http.Request) {
// u := []客户{}
你 := &客户{}
db, _ := gorm.Open("mysql", "root:@/main")
// db.First(&u, 5)
// db.First(&u)
// db.Find(&u, 5)
db.Find(&u)
}
这就是问题:
第一条命令:
这应该从返回的所有结果的集合中返回第一个结果。 (是否有额外的 WHERE 参数)。
它应该将 ONE 结果解析为 &Customer{} 并且没有一个包含一个结果的数组。
当前,当 &u 不是对切片的引用时,它不起作用。 &u 应该指向 &Customer{} 而不是 &[]Customer{}。
此函数也不应接受主键的额外参数。 这就是 FIND 函数的用途。
查找命令:
当 Find 命令被赋予一个主键时,它不应该返回一个切片。 它也应该总是期望一个主键值。
如果您想要所有值,请使用“ALL”命令。 db.ALL(&u) 其中 &u=[]Customer{}
http://daylerees.com/codebright/eloquent-queries
http://laravel.com/docs/4.2/queries
所有命令:
这应该包含在您的库中。 那将返回所有值。
db.All(&u),其中 &u=[]Customer{}
获取命令:
这应该包含在您的库中。 这将返回所有值的数组,包括在您放置 WHERE 约束之后。
你好@pjebs
虽然我从 ActiveRecord 那里窃取了想法,但它的工作方式并不完全一样,但工作方式如下:
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{})
最有用的评论
你好@pjebs
虽然我从 ActiveRecord 那里窃取了想法,但它的工作方式并不完全一样,但工作方式如下: