ホームページ >バックエンド開発 >Golang >Go で GORM を使用して場所とそれに関連する町を効率的にクエリするにはどうすればよいですか?

Go で GORM を使用して場所とそれに関連する町を効率的にクエリするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-09 00:09:10950ブラウズ

How Can I Efficiently Query Places and Their Associated Towns Using GORM in Go?

GORM Golang ORM Associations: Querying Places with Associated Towns

GORM for Go では、町と場所の関係など、モデル間の関係を定義できます。場所をクエリする場合、関連する町の情報も取得することが望ましいことがよくあります。

問題

町と場所を表す次の構造体を考えてみましょう。

type Place struct {
  ID          int
  Name        string
  Town        Town
}

type Town struct {
  ID   int
  Name string
}

2 つの町と、その町の 1 つに関連する 2 つの場所を含む単純なデータベースでは、すべての場所をクエリしても期待した結果が得られない可能性があります。関連する町の情報を持つ場所を取得する代わりに、空の町のフィールドを持つ場所の配列を受け取る場合があります。

解決策

場所とそれに関連する町の情報を正しくクエリするには、TownID が必要です。 Place 構造体の外部キーとして指定できます:

type Place struct {
  ID          int
  Name        string
  TownID      int
  Town        Town
}

クエリ:

アプローチ 1: Associated() メソッドを使用する

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)

このアプローチでは、すべての場所を取得するクエリと、すべての場所を取得するクエリの 2 つのクエリのみがトリガーされます。

このアプローチを使用すると、クエリは期待される結果を返します。各場所オブジェクトには、関連付けられた町の情報が含まれます。

以上がGo で GORM を使用して場所とそれに関連する町を効率的にクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。