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.
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.
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!