Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menyoal Tempat dan Bandar Bersekutunya Dengan Cekap Menggunakan GORM dalam Go?

Bagaimanakah Saya Boleh Menyoal Tempat dan Bandar Bersekutunya Dengan Cekap Menggunakan GORM dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-09 00:09:10
asal
958 orang telah melayarinya

How Can I Efficiently Query Places and Their Associated Towns Using GORM in Go?

Persatuan ORM GORM Golang: Menyiasat Tempat dengan Bandar Bersekutu

Dalam GORM for Go, anda boleh mentakrifkan hubungan antara model, seperti hubungan antara bandar dan tempat. Apabila menanyakan tempat, selalunya wajar untuk mendapatkan maklumat bandar yang berkaitan juga.

Isunya

Pertimbangkan struktur berikut yang mewakili bandar dan tempat:

type Place struct {
  ID          int
  Name        string
  Town        Town
}

type Town struct {
  ID   int
  Name string
}
Salin selepas log masuk

Dengan pangkalan data ringkas yang mengandungi dua bandar dan dua tempat yang berkaitan dengan salah satu bandar, menanyakan semua tempat mungkin tidak membuahkan hasil yang diharapkan. Daripada mendapatkan semula tempat dengan maklumat bandar yang berkaitan, anda mungkin menerima pelbagai tempat dengan medan bandar kosong.

Penyelesaian

Untuk membuat pertanyaan dengan betul untuk tempat dan maklumat bandar yang berkaitan, TownID mesti dinyatakan sebagai kunci asing dalam struct Tempat:

type Place struct {
  ID          int
  Name        string
  TownID      int
  Town        Town
}
Salin selepas log masuk

Beberapa pendekatan boleh diambil untuk mengendalikan pertanyaan:

Pendekatan 1: Menggunakan Kaedah Related()

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

Pendekatan ini mencetuskan pertanyaan tambahan untuk setiap tempat untuk mendapatkan semula bandar yang berkaitan, menghasilkan n 1 masalah.

Pendekatan 2: Menggunakan Pramuat

Pendekatan pilihan ialah menggunakan pramuat, yang membolehkan pertanyaan yang cekap bagi model yang berkaitan.

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

Pendekatan ini mencetuskan hanya dua pertanyaan: satu untuk mendapatkan semua tempat dan satu untuk mendapatkan semua bandar yang berkaitan.

Dengan menggunakan pendekatan ini, pertanyaan akan mengembalikan hasil yang dijangkakan, di mana setiap objek tempat mengandungi bandar yang berkaitan maklumat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal Tempat dan Bandar Bersekutunya Dengan Cekap Menggunakan GORM dalam Go?. 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