Apabila membuat pertanyaan data menggunakan GORM, anda mungkin menghadapi masalah mengimbas hasil ke dalam struktur data tersuai. Artikel ini meneroka cara menyelesaikan cabaran sedemikian dengan berkesan.
Pertimbangkan kod berikut yang mendapatkan semula data daripada dua jadual, pengguna dan kad_kredit, menggunakan gabungan kiri:
<code class="go">type res struct { id int number int user_id int } func getDataJoin() { new := []res{} db.Db.Table("users").Select("users.id as id, credit_cards.number as number, credit_cards.user_id as user_id").Joins("left join credit_cards on credit_cards.user_id = users.id").Scan(&new) fmt.Println("user\n", new) }</code>
Pertanyaan ini menjana hasil berikut:
[ {0 0 0}, {0 0 0}, {0 0 0}, {0 0 0}, {0 0 0}, {0 0 0} ]
Walaupun memperoleh set keputusan pertanyaan yang betul dalam pangkalan data, tatasusunan baharu hanya terdiri daripada nilai lalai.
Untuk menangani masalah ini, pastikan nama medan dalam struktur semula sejajar dengan nama lajur pangkalan data. Secara lalai, GORM menjangkakan nama medan sepadan dengan nama lajur dengan tepat. Sebagai alternatif, anda boleh menentukan pemetaan eksplisit antara lajur dan medan menggunakan teg gorm:
<code class="go">// Solution 1: Public Fields type Res struct { ID int Number int UserID int } // Solution 2: Explicit Mapping type res struct { id int `gorm:"column:id"` number int `gorm:"column:number"` user_id int `gorm:"column:user_id"` }</code>
Dengan menggunakan penyelesaian ini, GORM boleh mengimbas hasil pertanyaan dengan betul ke dalam tatasusunan baharu.
Atas ialah kandungan terperinci Cara Mengimbas Hasil Pertanyaan GORM dengan Berkesan ke dalam Struktur: Panduan untuk Menyelesaikan Isu Pemetaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!