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
Linda Hamiltonasal
2024-12-18 13:40:11887semak imbas

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
}

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

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)

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

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!

Kenyataan:
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