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
Mary-Kate Olsenasal
2024-12-09 00:09:101003semak imbas

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
}

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
}

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

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)

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!

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