Gorm: Masalah dengan Find() dan First()

Dibuat pada 22 Nov 2014  ·  3Komentar  ·  Sumber: go-gorm/gorm

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.

Komentar yang paling membantu

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{})

Semua 3 komentar

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{})
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

kumarsiva07 picture kumarsiva07  ·  3Komentar

alanyuen picture alanyuen  ·  3Komentar

corvinusy picture corvinusy  ·  3Komentar

youtwo123 picture youtwo123  ·  3Komentar

superwf picture superwf  ·  3Komentar