首頁  >  文章  >  後端開發  >  GORM 傳回結果清單或按 id 分組的結果圖

GORM 傳回結果清單或按 id 分組的結果圖

王林
王林轉載
2024-02-12 11:54:081145瀏覽

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

php小編新一今天為大家介紹GORM的一個重要功能,也就是傳回結果清單或依id分組的結果圖。 GORM是一個強大的資料庫存取庫,它提供了豐富的查詢和操作資料庫的方法。透過使用GORM,我們可以輕鬆地從資料庫中獲取結果列表,也可以按照id進行分組並傳回結果圖。這個功能在實際開發上非常實用,能夠幫助我們更方便地處理資料庫查詢結果。接下來,讓我們一起來了解如何使用GORM來實現這個功能吧!

問題內容

本質上,使用 gormdb,我目前的程式碼看起來像這樣:

res = []*modelExample

DB.Model(&modelExample{}).
        Order("task_id ").
        Find(res)

我對 res 所做的事情是,我將手動循環並將具有相同 task_id 的模型附加到一個列表中,然後附加要處理的此列表。我需要這樣做的原因是因為我需要對特定列執行一些特定操作,我需要提取這些操作,而這些操作在 gorm 中無法執行。

但是,有沒有一種方法可以更有效地執行此操作,讓我像列表的列表一樣返回,然後我可以 for 循環並對每個列表元素執行操作?

解決方法

您應該可以使用以下程式碼片段來實現您的需求:

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)
    }
}

完成初始設定後,讓我們仔細看看查詢部分。
首先,您將從表中取得所有記錄。您取得的記錄儲存在 rows 變數中。
for 迴圈中,您掃描所有記錄。每筆記錄都會新增為新的地圖條目或附加到現有條目(如果 taskid 已存在於地圖中)。
這是根據特定列建立不同清單的最簡單方法(例如 taskid)。實際上,根據我的理解,您需要拆分記錄,而不是使用聚合函數將它們分組(例如 countsum 等)。
我添加的其他程式碼只是為了清楚起見而添加的。
如果這解決了您的問題或您需要其他東西,請告訴我,謝謝!

以上是GORM 傳回結果清單或按 id 分組的結果圖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除