GORM gibt eine Ergebnisliste oder ein Ergebnisdiagramm gruppiert nach ID zurück

王林
Freigeben: 2024-02-12 11:54:08
nach vorne
1144 Leute haben es durchsucht

GORM 返回结果列表或按 id 分组的结果图

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!

Frageninhalt

Mit gormdb sieht mein aktueller Code im Wesentlichen so aus:

res = []*modelExample

DB.Model(&modelExample{}).
        Order("task_id ").
        Find(res)
Nach dem Login kopieren

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?

Workaround

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 dem Login kopieren

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)。实际上,根据我的理解,您需要拆分记录,而不是使用聚合函数将它们分组(例如 countsum 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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!