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 サイトの他の関連記事を参照してください。