首頁 >後端開發 >Golang >如何有效率地取得GORM地點-城鎮關係中的關聯資料?

如何有效率地取得GORM地點-城鎮關係中的關聯資料?

Linda Hamilton
Linda Hamilton原創
2024-12-18 13:40:11887瀏覽

How to Efficiently Fetch Associated Data in GORM's Place-Town Relationship?

GORM Golang ORM 關聯:取得關聯欄位

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn