ホームページ >バックエンド開発 >Golang >GORM のプリロード機能はどのようにして Go で関連レコードを効率的にフェッチできるのでしょうか?

GORM のプリロード機能はどのようにして Go で関連レコードを効率的にフェッチできるのでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-10 18:13:14454ブラウズ

How Can GORM's Preload Function Efficiently Fetch Related Records in Go?

GORM Golang ORM 関連付け: 関連レコードのプリロード

GORM は、データベース操作を簡素化する Go 用の人気のある ORM です。 ORM を使用する場合、関連レコード間の関連付けを管理することが不可欠です。このコンテキストでは、GORM のプリロード機能を使用して関連レコードを効率的に取得する方法を検討します。

Place と Town という 2 つの構造体があるシナリオを考えてみましょう。各プレイスは 1 つのタウンに属し、各タウンには複数のプレイスがあります。

type Place struct {
  ID          int
  Name        string
  Town        Town
}

type Town struct {
  ID   int
  Name string
}

すべてのプレイスを取得し、各プレイスに対応するタウンを積極的にロードするには、Preload 関数を使用できます。

db.Preload("Town").Find(&places)

この 1 行のコードは 2 つのクエリを実行します。1 つはすべての Place を取得するクエリ、もう 1 つは一致する Place を持つすべての Town を取得するクエリです。結果として得られる Place 構造体のスライスには、Town フィールドが設定されます。

fmt.Println(places)
// Output: [{1 Place1  {1 Town1}} {2 Place2  {1 Town1}}]

このアプローチは、関連レコードを取得するために N 個の追加クエリを実行する必要がある場合に発生する N 1 問題を回避できるため、効率的です。プリロードを使用すると、わずか 2 つのクエリで必要なデータをすべて取得できるため、大規模なデータセットの場合により効率的になります。

以上がGORM のプリロード機能はどのようにして Go で関連レコードを効率的にフェッチできるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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