Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengambil Data Berkaitan dengan Cekap dalam Hubungan Tempat-Pekan GORM?

Bagaimana untuk Mengambil Data Berkaitan dengan Cekap dalam Hubungan Tempat-Pekan GORM?

Linda Hamilton
Lepaskan: 2024-12-18 13:40:11
asal
885 orang telah melayarinya

How to Efficiently Fetch Associated Data in GORM's Place-Town Relationship?

Persatuan ORM GORM Golang: Mengambil Medan Berkaitan

Dalam GORM, ORM yang berkuasa untuk Go, anda boleh mencipta perkaitan antara struct yang mewakili jadual pangkalan data. Dalam senario ini, anda mempunyai struct Place yang dikaitkan dengan struct Town, di mana setiap Place adalah milik satu Town.

Kod anda pada masa ini mengambil semua rekod Place, tetapi anda ingin memasukkan maklumat Bandar yang berkaitan untuk setiap Tempat. Ralat dalam pertanyaan anda ialah kunci asing TownID tidak dinyatakan dalam struct Place.

Untuk membetulkannya, ubah suai struct Place:

type Place struct {
  ID          int
  Name        string
  TownID      int // The foreign key
  Town        Town
}
Salin selepas log masuk

Kini, anda mempunyai berbilang pilihan untuk dapatkan semula data Bandar yang berkaitan:

Pilihan 1: Pemuatan Manual (Tidak Disyorkan)

Lelaran pada setiap Tempat dan muatkan Bandar yang berkaitan secara manual menggunakan Model. Berkaitan:

places := []Place{}
db.Find(&places)
for i, _ := range places {
    db.Model(places[i]).Related(&places[i].Town)
}
Salin selepas log masuk

Pendekatan ini, sambil menghasilkan hasil yang diharapkan, mengalami "N 1 " masalah, di mana berbilang pertanyaan pangkalan data dikeluarkan untuk setiap tempat.

Pilihan 2: Pramuat (Disyorkan)

Gunakan fungsi Pramuat untuk tidak sabar-sabar memuatkan Bandar yang berkaitan sambil mengambil rekod Tempat:

db.Preload("Town").Find(&places)
Salin selepas log masuk

Ini akan mencetuskan hanya dua pertanyaan: satu untuk mengambil semua tempat dan satu untuk mengambil semua bandar yang berkaitan. Ia berskala baik dengan bilangan tempat dan bandar.

Output Jangkaan:

[{1 Place1  {1 Town1} 1} {2 Place2  {1 Town1} 1}]
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengambil Data Berkaitan dengan Cekap dalam Hubungan Tempat-Pekan GORM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan