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