Rumah >pembangunan bahagian belakang >Golang >GORM mengembalikan senarai keputusan atau graf hasil yang dikumpulkan mengikut 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!
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?
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
)。实际上,根据我的理解,您需要拆分记录,而不是使用聚合函数将它们分组(例如 count
、sum
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!