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