在 GORM(一個強大的 Go ORM)中,您可以在表示資料庫表的結構之間建立關聯。在此場景中,您有一個與 Town 結構關聯的 Place 結構,其中每個 Place 屬於一個 Town。
您的程式碼目前取得所有 Place 記錄,但您希望包含每個 Place 的關聯 Town 資訊。您查詢中的錯誤是 Place 結構中未指定外鍵 TownID。
要解決此問題,請修改Place 結構:
type Place struct { ID int Name string TownID int // The foreign key Town Town }
現在,您有多種選擇檢索關聯的城鎮資料:
選項1:手動加載(不建議)
迭代每個地點並使用模型手動加載關聯的城鎮。相關:
places := []Place{} db.Find(&places) for i, _ := range places { db.Model(places[i]).Related(&places[i].Town) }
這種方法在產生預期結果的同時,受到「N 1 「問題,每個地方都會發出多個資料庫查詢。
選項2:預先載入(建議)
在取得地點記錄時使用Preload 函數預先載入關聯的城鎮:
db.Preload("Town").Find(&places)
這只會觸發兩個查詢:一個用於獲取所有地點,一個用於獲取所有地點獲取所有關聯的城鎮。它隨著地點和城鎮的數量而擴展。
預期輸出:
[{1 Place1 {1 Town1} 1} {2 Place2 {1 Town1} 1}]
以上是如何有效率地取得GORM地點-城鎮關係中的關聯資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!