ホームページ > バックエンド開発 > Golang > GORM の Place-Town Relationship で関連データを効率的に取得するにはどうすればよいですか?

GORM の Place-Town Relationship で関連データを効率的に取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-18 13:40:11
オリジナル
887 人が閲覧しました

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

GORM Golang ORM 関連付け: 関連フィールドの取得

Go 用の強力な ORM である GORM では、データベース テーブルを表す構造体間の関連付けを作成できます。このシナリオでは、Place 構造体が Town 構造体に関連付けられており、各 Place は 1 つの Town に属します。

コードでは現在、すべての Place レコードを取得していますが、各 Place に関連付けられた Town 情報を含めたいと考えています。クエリのエラーは、Place 構造体で外部キー TownID が指定されていないことです。

これを修正するには、Place 構造体を変更します。

type Place struct {
  ID          int
  Name        string
  TownID      int // The foreign key
  Town        Town
}
ログイン後にコピー

ここで、複数のオプションがあります。関連する町データを取得します:

オプション 1: 手動読み込み (非推奨)

各場所を反復処理し、Model を使用して関連する町を手動でロードします。関連:

places := []Place{}
db.Find(&places)
for i, _ := range places {
    db.Model(places[i]).Related(&places[i].Town)
}
ログイン後にコピー

このアプローチでは、期待される結果が得られますが、「N 1」という問題が発生します。 " 問題。場所ごとに複数のデータベース クエリが発行されます。

オプション 2: プリロード(推奨)

Place レコードの取得中に、Preload 関数を使用して関連する Town を一括ロードします。

db.Preload("Town").Find(&places)
ログイン後にコピー

これにより、すべての場所を取得するクエリと、すべての場所を取得するクエリの 2 つのクエリのみがトリガーされます。関連するすべての町を取得します。場所や町の数に合わせて調整できます。

期待される出力:

[{1 Place1  {1 Town1} 1} {2 Place2  {1 Town1} 1}]
ログイン後にコピー

以上がGORM の Place-Town Relationship で関連データを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート