ホームページ  >  記事  >  バックエンド開発  >  GORM クエリ結果を効果的にスキャンして構造体に変換する方法: マッピングの問題を解決するためのガイド

GORM クエリ結果を効果的にスキャンして構造体に変換する方法: マッピングの問題を解決するためのガイド

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 05:25:29605ブラウズ

How to Effectively Scan GORM Query Results into Structs: A Guide to Resolving Mapping Issues

GORM クエリ結果を構造体にスキャンする

GORM を使用してデータをクエリする場合、結果をカスタム データ構造にスキャンする際に問題が発生する場合があります。この記事では、このような課題を効果的に解決する方法について説明します。

サンプル コードと問題の説明

左結合を使用して、users とcredit_cards の 2 つのテーブルからデータを取得する次のコードを考えてみましょう。

<code class="go">type res struct {
    id       int
    number   int
    user_id int
}

func getDataJoin() {
    new := []res{}
    db.Db.Table("users").Select("users.id as id, credit_cards.number as number, credit_cards.user_id as user_id").Joins("left join credit_cards on credit_cards.user_id = users.id").Scan(&new)
    fmt.Println("user\n", new)
}</code>

このクエリは次の結果を生成します:

[
  {0 0 0},
  {0 0 0},
  {0 0 0},
  {0 0 0},
  {0 0 0},
  {0 0 0}
]

データベース内で正しいクエリ結果セットを取得しているにもかかわらず、新しい配列はデフォルト値のみで構成されています。

解決策:フィールドの命名規則とマッピング

この問題に対処するには、res struct 内のフィールド名がデータベースの列名と一致していることを確認します。デフォルトでは、GORM はフィールド名が列名と正確に一致することを期待します。あるいは、gorm タグを使用して列とフィールド間の明示的なマッピングを指定することもできます。

<code class="go">// Solution 1: Public Fields

type Res struct {
    ID       int
    Number   int
    UserID   int
}

// Solution 2: Explicit Mapping

type res struct {
    id       int      `gorm:"column:id"`
    number   int      `gorm:"column:number"`
    user_id  int      `gorm:"column:user_id"`
}</code>

これらのソリューションを適用すると、GORM はクエリ結果を新しい配列に正しくスキャンできます。

以上がGORM クエリ結果を効果的にスキャンして構造体に変換する方法: マッピングの問題を解決するためのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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