Der PHP-Editor Xinyi stellt Ihnen heute eine wichtige Funktion von GORM vor, nämlich die Rückgabe einer Ergebnisliste oder eines nach ID gruppierten Ergebnisdiagramms. GORM ist eine leistungsstarke Datenbankzugriffsbibliothek, die umfassende Methoden zum Abfragen und Betreiben von Datenbanken bietet. Durch die Verwendung von GORM können wir die Ergebnisliste einfach aus der Datenbank abrufen, sie auch nach ID gruppieren und das Ergebnisdiagramm zurückgeben. Diese Funktion ist in der tatsächlichen Entwicklung sehr praktisch und kann uns dabei helfen, Datenbankabfrageergebnisse bequemer zu verarbeiten. Als nächstes lernen wir, wie man GORM verwendet, um diese Funktion zu implementieren!
Mit gormdb sieht mein aktueller Code im Wesentlichen so aus:
res = []*modelExample DB.Model(&modelExample{}). Order("task_id "). Find(res)
Was ich mit res gemacht habe, ist, dass ich die Modelle mit derselben task_id manuell in einer Schleife durchlaufen und an eine Liste angehängt habe und diese Liste dann zur Verarbeitung angehängt habe. Der Grund, warum ich dies tun muss, ist, dass ich bestimmte Vorgänge für bestimmte Spalten ausführen muss, die ich extrahieren muss, und diese Vorgänge in Gorm nicht ausgeführt werden können.
Gibt es jedoch eine Möglichkeit, dies effizienter zu machen, sodass ich wie eine Liste von Listen zurückkehren und dann eine for-Schleife durchführen und die Operation für jedes Listenelement ausführen kann?
Sie sollten in der Lage sein, den folgenden Codeausschnitt zu verwenden, um Ihre Anforderungen zu erfüllen:
package main import ( "fmt" "gorm.io/driver/postgres" "gorm.io/gorm" ) type modelExample struct { TaskId int Name string } func main() { dsn := "host=localhost user=postgres password=postgres dbname=postgres port=5432 sslmode=disable" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { panic(err) } db.AutoMigrate(&modelExample{}) // here you should populate the database with some data // querying res := make(map[int][]modelExample, 0) rows, err := db.Table("model_examples").Select("task_id, name").Rows() if err != nil { panic(err) } defer rows.Close() // scanning for rows.Next() { var taskId int var name string rows.Scan(&taskId, &name) if _, isFound := res[taskId]; !isFound { res[taskId] = []modelExample{{taskId, name}} continue } res[taskId] = append(res[taskId], modelExample{taskId, name}) } // always good idea to check for errors when scanning if err = rows.Err(); err != nil { panic(err) } for _, v := range res { fmt.Println(v) } }
Nach Abschluss der Ersteinrichtung werfen wir einen genaueren Blick auf den Abfragebereich.
Zunächst erhalten Sie alle Datensätze aus der Tabelle. Der Datensatz, den Sie erhalten, wird in der Variablen rows
gespeichert.
in for
循环中,您扫描所有记录。每条记录都将添加为新的地图条目或附加到现有条目(如果 taskid
existiert bereits in der Karte).
Dies ist der einfachste Weg, verschiedene Listen basierend auf bestimmten Spalten (wie taskid
)。实际上,根据我的理解,您需要拆分记录,而不是使用聚合函数将它们分组(例如 count
、sum
usw.) zu erstellen.
Der andere Code, den ich hinzugefügt habe, dient nur der Klarheit.
Wenn dies Ihr Problem löst oder Sie etwas anderes benötigen, lassen Sie es mich bitte wissen, danke!
Das obige ist der detaillierte Inhalt vonGORM gibt eine Ergebnisliste oder ein Ergebnisdiagramm gruppiert nach ID zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!