在GORM for Go 中,可以定義模型之間的關係,例如城鎮和地點之間的關係。查詢地點時,通常還需要檢索關聯的城鎮資訊。
考慮以下代表城鎮和地點的結構:
type Place struct { ID int Name string Town Town } type Town struct { ID int Name string }
帶有一個簡單的資料庫包含兩個城鎮和與其中一個城鎮相關的兩個地點,查詢所有地點可能不會產生預期的結果。您可能會收到一系列具有空城鎮欄位的地點,而不是檢索地點及其關聯的城鎮資訊。
要正確查詢地點及其關聯的城鎮信息,TownID 必須被指定為 Place結構體中的外鍵:
type Place struct { ID int Name string TownID int Town Town }
可以採取多種方法來處理查詢:
方法1:使用Related()方法
places := []Place{} db.Find(&places) for i, _ := range places { db.Model(places[i]).Related(&places[i].Town) }
此方法會觸發對每個地點的額外查詢以檢索關聯的城鎮,從而產生n 1 個問題。
方法 2: 使用預先載入
首選方法是使用預先加載,這樣可以有效查詢關聯模型。
db.Preload("Town").Find(&places)
此方法只觸發兩個查詢:一個檢索所有位置,一個檢索所有位置關聯的城鎮。
透過使用這種方法,查詢將傳回預期的結果,其中每個地點物件都包含關聯的城鎮資訊。
以上是如何在 Go 中使用 GORM 高效查詢地點及其相關城鎮?的詳細內容。更多資訊請關注PHP中文網其他相關文章!