In GORM, einem leistungsstarken ORM für Go, können Sie Assoziationen zwischen Strukturen erstellen, die Datenbanktabellen darstellen. In diesem Szenario ist eine Ortsstruktur mit einer Stadtstruktur verknüpft, wobei jeder Ort zu einer Stadt gehört.
Ihr Code ruft derzeit alle Ortsdatensätze ab, Sie möchten jedoch die zugehörigen Stadtinformationen für jeden Ort einschließen. Der Fehler in Ihrer Abfrage besteht darin, dass der Fremdschlüssel TownID nicht in der Place-Struktur angegeben ist.
Um dies zu beheben, ändern Sie die Place-Struktur:
type Place struct { ID int Name string TownID int // The foreign key Town Town }
Jetzt haben Sie mehrere Möglichkeiten dazu Rufen Sie die zugehörigen Stadtdaten ab:
Option 1: Manuelles Laden (nicht Empfohlen)
Durchlaufen Sie jeden Ort und laden Sie die zugehörige Stadt manuell mithilfe von Model.Related:
places := []Place{} db.Find(&places) for i, _ := range places { db.Model(places[i]).Related(&places[i].Town) }
Dieser Ansatz liefert zwar das erwartete Ergebnis, leidet aber unter dem Fehler „N 1“. " Problem, bei dem für jeden Ort mehrere Datenbankabfragen ausgegeben werden.
Option 2: Vorladen (Empfohlen)
Verwenden Sie die Vorladefunktion, um die zugehörige Stadt beim Abrufen von Ortsdatensätzen sofort zu laden:
db.Preload("Town").Find(&places)
Dadurch werden nur zwei Abfragen ausgelöst: eine zum Abrufen aller Orte und eine um alle zugehörigen Städte abzurufen. Es lässt sich gut mit der Anzahl der Orte und Städte skalieren.
Erwartete Ausgabe:
[{1 Place1 {1 Town1} 1} {2 Place2 {1 Town1} 1}]
Das obige ist der detaillierte Inhalt vonWie lassen sich zugehörige Daten in der Ort-Stadt-Beziehung von GORM effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!