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

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 までご連絡ください。
「sync/atomic」をどのように使用しますかゴーでアトミック操作を実行するパッケージ?「sync/atomic」をどのように使用しますかゴーでアトミック操作を実行するパッケージ?Apr 30, 2025 pm 02:26 PM

この記事では、同時プログラミングにおけるGoの「Sync/Atomic」パッケージを使用して、人種の条件の防止やパフォーマンスの改善などの利点を詳述していることについて説明します。

GOでタイプ変換を作成して使用するための構文は何ですか?GOでタイプ変換を作成して使用するための構文は何ですか?Apr 30, 2025 pm 02:25 PM

この記事では、構文、安全な変換慣行、一般的な落とし穴、学習リソースなど、GOのタイプ変換について説明します。明示的なタイプの変換とエラー処理を強調しています。[159文字]

GOでタイプアサーションを作成して使用するための構文は何ですか?GOでタイプアサーションを作成して使用するための構文は何ですか?Apr 30, 2025 pm 02:24 PM

この記事では、構文、パニックや誤ったタイプなどの潜在的なエラー、安全な取り扱い方法、パフォーマンスへの影響に焦点を当てたGOのタイプアサーションについて説明します。

" select"をどのように使用しますかGo?の声明?" select"をどのように使用しますかGo?の声明?Apr 30, 2025 pm 02:23 PM

この記事では、複数のチャネル操作を処理するためのGOの「選択」ステートメントの使用、「スイッチ」ステートメントとの違い、および複数のチャネルの処理、タイムアウトの実装、Non-Bなどの一般的なユースケースについて説明します。

GOでリテラル関数を作成および使用するための構文は何ですか?GOでリテラル関数を作成および使用するための構文は何ですか?Apr 30, 2025 pm 02:22 PM

この記事では、GOの関数リテラルについて説明し、構文、引数としての使用法、簡潔なコードや閉鎖などの利点について詳しく説明しています。また、関数リテラル内の可変スコープについても説明しています。(159文字)

GOで関数閉鎖をどのように作成して使用しますか?GOで関数閉鎖をどのように作成して使用しますか?Apr 30, 2025 pm 02:21 PM

この記事では、GOで関数閉鎖を作成および使用する方法について説明し、カプセル化や国家管理などの利点を強調し、避けるべき一般的な落とし穴について説明します。

どのように構造を埋め込みましたか?どのように構造を埋め込みましたか?Apr 30, 2025 pm 02:20 PM

この記事では、コードの再利用と簡素化された構文のための他の構造体を含む新しい構造体を作成する方法であるGOに埋め込まれた構造について説明しています。コードの再利用性や継承のような動作などの利点について説明し、埋め込みにアクセスする方法について詳しく説明します

GOの構造体へのポインターをどのように作成して使用しますか?GOの構造体へのポインターをどのように作成して使用しますか?Apr 30, 2025 pm 02:19 PM

記事では、ポインターを作成して使用して、GOの構造化、その利点、修正、および避けるべき一般的な間違いについて説明します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境