Saya tidak yakin apakah masalah ini ada pada kode atau dokumentasi Anda.
Saya juga berasumsi Anda mendesain GORM berdasarkan Ruby On Rails atau PHP-Laravel, itulah sebabnya saya yakin ada kesalahan.
http://laravel.com/docs/4.2/eloquent
Saya tidak berharap Anda setuju dengan semua saran saya karena Anda mencoba membuat Find() dan First() menyelesaikan 4 perintah di Laravel: All(), First(), Find(), Get().
Tetapi kelemahannya adalah metode Anda SELALU mengembalikan irisan bahkan jika lebih mudah untuk mendapatkan Satu Struct (tanpa irisan) ketika Anda INGIN dan MENGHARAPKAN satu hasil.
ketik Struktur pelanggan {
Id uint32 gorm:"column:id; primary_key:yes"
String token_akses gorm:"column:access_token"
}
func (c Pelanggan) NamaTabel() string {
kembali "pelanggan"
}
func MyMiddleware(rw http.ResponseWriter, r *http.Request) {
// u := []Pelanggan{}
u := &Pelanggan{}
db, _ := gorm.Open("mysql", "root:@/main")
// db.First(&u, 5)
// db.First(&u)
// db.Find(&u, 5)
db.Find(&u)
}
Ini masalahnya:
PERINTAH PERTAMA:
Ini harus mengembalikan hasil pertama kembali dari kumpulan semua hasil yang dikembalikan. (apakah ada parameter WHERE tambahan atau tidak).
Ini harus mengurai SATU hasil menjadi &Pelanggan{} dan TIDAK memiliki larik dengan satu hasil di sana.
Saat ini tidak berfungsi ketika &u bukan referensi ke irisan. &u harus menunjuk ke &Pelanggan{} dan bukan &[]Pelanggan{}.
Fungsi ini juga TIDAK PERNAH menerima parameter tambahan untuk kunci utama. Itulah gunanya fungsi FIND.
TEMUKAN PERINTAH:
Ketika perintah Temukan diberikan kunci utama, itu tidak akan mengembalikan sepotong. Itu juga harus SELALU mengharapkan nilai kunci utama.
Jika Anda menginginkan semua nilai, gunakan COMMAND "ALL". db.ALL(&u) di mana &u=[]Pelanggan{}
http://daylerees.com/codebright/eloquent-queries
http://laravel.com/docs/4.2/queries
SEMUA PERINTAH:
Ini harus disertakan dalam perpustakaan Anda. Itu akan mengembalikan semua nilai.
db.All(&u), di mana &u=[]Pelanggan{}
DAPATKAN PERINTAH:
Ini harus disertakan dalam perpustakaan Anda. Ini akan mengembalikan ARRAY dari semua nilai termasuk setelah Anda menerapkan batasan WHERE.
Halo @pjebs
Meskipun saya mencuri ide dari ActiveRecord, itu tidak berfungsi persis seperti itu, tetapi berfungsi seperti di bawah ini:
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{})
Komentar yang paling membantu
Halo @pjebs
Meskipun saya mencuri ide dari ActiveRecord, itu tidak berfungsi persis seperti itu, tetapi berfungsi seperti di bawah ini: