Gorm: Find() 和 First() 的问题

创建于 2014-11-22  ·  3评论  ·  资料来源: go-gorm/gorm

我不确定这个问题是否与您的代码或文档有关。
我还假设您基于 Ruby On Rails 或 PHP-Laravel 设计了 ​​GORM,这就是我认为存在错误的原因。

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

我不希望你同意我的所有建议,因为你试图让 Find() 和 First() 完成 Laravel 中的 4 个命令:All()、First()、Find()、Get()。

但缺点是您的方法总是返回切片,即使在您想要和期望一个结果时获得一个结构(没有切片)更方便。

最有用的评论

你好@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{})

所有3条评论

类型客户结构{
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{})
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

easonlin404 picture easonlin404  ·  3评论

littletwolee picture littletwolee  ·  3评论

sredxny picture sredxny  ·  3评论

kumarsiva07 picture kumarsiva07  ·  3评论

izouxv picture izouxv  ·  3评论