Я не уверен, связана ли эта проблема с вашим кодом или документацией.
Я также предполагаю, что вы разработали GORM на основе Ruby On Rails или PHP-Laravel, поэтому я считаю, что это ошибка.
http://laravel.com/docs/4.2/eloquent
Я не ожидаю, что вы согласитесь со всеми моими предложениями, потому что вы пытаетесь заставить Find () и First () выполнять 4 команды в Laravel: All (), First (), Find (), Get ().
Но обратная сторона - то, что ваш метод ВСЕГДА возвращает срез, даже если удобнее получить одну структуру (без среза), когда вы ХОТИТЕ и ОЖИДАЕТЕ один результат.
type Customer struct {
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: = [] Клиент {}
u: = & Клиент {}
db, _ := gorm.Open("mysql", "root:@/main")
// db.First(&u, 5)
// db.First(&u)
// db.Find(&u, 5)
db.Find(&u)
}
Это проблема:
ПЕРВАЯ КОМАНДА:
Это должно вернуть первый результат из коллекции всех возвращаемых результатов. (есть ли дополнительные параметры WHERE или нет).
Он должен анализировать ОДИН результат в & Customer {} и НЕ иметь там массива с одним результатом.
В настоящее время это не работает, если & u не является ссылкой на срез. & u должен указывать на & Customer {}, а не на & [] Customer {}.
Эта функция также НИКОГДА не должна принимать дополнительный параметр для первичного ключа. Для этого и предназначена функция НАЙТИ.
НАЙТИ КОМАНДУ:
Когда команде «Найти» дается первичный ключ, она не должна возвращать срез. Он также должен ВСЕГДА ожидать значение первичного ключа.
Если вам нужны все значения, используйте КОМАНДУ «ВСЕ». db.ALL (& u) где & u = [] Клиент {}
http://daylerees.com/codebright/eloquent-queries
http://laravel.com/docs/4.2/queries
ВСЕ КОМАНДЫ:
Это должно быть включено в вашу библиотеку. Это вернет все значения.
db.All (& u), где & u = [] Customer {}
ПОЛУЧИТЬ КОМАНДУ:
Это должно быть включено в вашу библиотеку. Это вернет ARRAY всех значений, в том числе после того, как вы установили ограничения 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, он работает не совсем так, как показано ниже: