Rumah >pembangunan bahagian belakang >Golang >GORM mengembalikan senarai keputusan atau graf hasil yang dikumpulkan mengikut id

GORM mengembalikan senarai keputusan atau graf hasil yang dikumpulkan mengikut id

王林
王林ke hadapan
2024-02-12 11:54:081214semak imbas

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

Editor PHP Xinyi hari ini memperkenalkan kepada anda fungsi penting GORM, iaitu mengembalikan senarai keputusan atau graf hasil yang dikumpulkan mengikut id. GORM ialah perpustakaan capaian pangkalan data yang berkuasa yang menyediakan kaedah yang kaya untuk menyoal dan mengendalikan pangkalan data. Dengan menggunakan GORM, kita boleh dengan mudah mendapatkan senarai hasil daripada pangkalan data dan juga kumpulan mengikut id dan mengembalikan graf hasil. Fungsi ini sangat praktikal dalam pembangunan sebenar dan boleh membantu kami memproses hasil pertanyaan pangkalan data dengan lebih mudah. Seterusnya, mari kita pelajari cara menggunakan GORM untuk melaksanakan fungsi ini!

Kandungan soalan

Pada asasnya, menggunakan gormdb, kod semasa saya kelihatan seperti ini:

res = []*modelExample

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

Apa yang saya lakukan dengan res ialah saya akan menggelung dan menambahkan model dengan task_id yang sama pada senarai dan kemudian menambahkan senarai ini untuk diproses. Sebab saya perlu melakukan ini adalah kerana saya perlu melakukan beberapa operasi khusus pada lajur tertentu yang perlu saya ekstrak dan operasi ini tidak boleh dilakukan dalam gorm.

Walau bagaimanapun, adakah terdapat cara untuk melakukan ini dengan lebih cekap, membolehkan saya kembali seperti senarai senarai, dan kemudian saya boleh untuk gelung dan melaksanakan operasi pada setiap elemen senarai?

Penyelesaian

Anda seharusnya boleh menggunakan coretan kod berikut untuk mencapai keperluan anda:

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

Selepas melengkapkan persediaan awal, mari kita lihat dengan lebih dekat bahagian pertanyaan.
Pertama, anda akan mendapat semua rekod daripada jadual. Rekod yang anda peroleh disimpan dalam pembolehubah rows.
dalam for 循环中,您扫描所有记录。每条记录都将添加为新的地图条目或附加到现有条目(如果 taskid sudah wujud dalam peta).
Ini ialah cara paling mudah untuk membuat senarai berbeza berdasarkan lajur tertentu (seperti taskid)。实际上,根据我的理解,您需要拆分记录,而不是使用聚合函数将它们分组(例如 countsum dsb.).
Kod lain yang saya tambahkan hanyalah untuk kejelasan.
Jika ini menyelesaikan masalah anda atau anda memerlukan sesuatu yang lain, sila beritahu saya, terima kasih!

Atas ialah kandungan terperinci GORM mengembalikan senarai keputusan atau graf hasil yang dikumpulkan mengikut id. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam