Beim Abfragen von Daten mit GORM können Probleme beim Scannen der Ergebnisse in eine benutzerdefinierte Datenstruktur auftreten. In diesem Artikel wird untersucht, wie solche Herausforderungen effektiv gelöst werden können.
Betrachten Sie den folgenden Code, der Daten aus zwei Tabellen, „users“ und „credit_cards“, mithilfe eines Left-Joins abruft:
<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>
Diese Abfrage generiert das folgende Ergebnis:
[ {0 0 0}, {0 0 0}, {0 0 0}, {0 0 0}, {0 0 0}, {0 0 0} ]
Obwohl der korrekte Abfrageergebnissatz in der Datenbank erhalten wurde, besteht das neue Array ausschließlich aus Standardwerten.
Um dieses Problem zu beheben, stellen Sie sicher, dass die Feldnamen in der Struktur mit den Spaltennamen der Datenbank übereinstimmen. Standardmäßig erwartet GORM, dass Feldnamen genau mit den Spaltennamen übereinstimmen. Alternativ können Sie mithilfe des gorm-Tags explizite Zuordnungen zwischen Spalten und Feldern angeben:
<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>
Durch die Anwendung dieser Lösungen kann GORM die Abfrageergebnisse korrekt in das neue Array scannen.
Das obige ist der detaillierte Inhalt vonSo scannen Sie GORM-Abfrageergebnisse effektiv in Strukturen: Ein Leitfaden zur Lösung von Zuordnungsproblemen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!