gormが結合して結果 -- go フィールド と join フィールド と go-gorm フィールド 関連 問題

GORM JOINs and Results












5
vote

問題

日本語

2つのテーブルがあるとします。

のようないくつかの列名を共有します。

 <コード> table_1  - id  - created_at  - deleted_at  - name  - color    table_2  - id  - created_at  - deleted_at  - address  - name  

Theres 2テーブルに参加クエリを実行すると、次のようになります。<コード> id, created_at, name, color, id, created_at, deleted_at, address, name

私は上記のモデルに似た2つの構造体を持っています。結果を結果の構造体にスキャンしたい:

 <コード> type Result struct {   Model1   Model2  }  

<コード> db.Raw().Scan(&result) を使用します。今問題: table_2のIDは、結果構造体の表1の構造体のみに表2の構造体に書き込まれません。

私は私の問題を十分に明確に説明したことを願っています。 私の質問は、同じ名前の列がある場合に、結果構造体への参加クエリの結果をどのように読み取ることができます。

英語

Suppose I have 2 tables, which share some column names such as:

table_1  - id  - created_at  - deleted_at  - name  - color    table_2  - id  - created_at  - deleted_at  - address  - name

When I run a join query on theres 2 tables I get something back like this: id, created_at, name, color, id, created_at, deleted_at, address, name

I have 2 structs resembling the models I described above. Now I want to scan the results into a results struct:

type Result struct {   Model1   Model2  }

I then use db.Raw().Scan(&result). Now the Problem: The id of table_2 is never written into the struct for table 2, only into the struct of table 1 in the results struct.

I hope I described my problem clearly enough. My question is: How can I read the results of a JOIN query into a results struct, when there are columns named the same.

</div
        
 
 

回答リスト

2
 
vote

gorm v1で可能かどうかはわかりませんが、v2では埋め込み構造体 2つの結果セットを曖昧にするための接頭辞では、列に適切に埋め込まれたモデルに指示することができます。

 <コード> RunAsync7  
 

I don't know whether this was possible in Gorm V1, but in V2 you can use Embedded Structs with a prefix to disambiguate the two result sets, you can then name the columns appropriately to direct them to the right embedded model:

type Model1 struct {     ID    int `gorm:"primaryKey"`     Value string }  type Model2 struct {     ID    int `gorm:"primaryKey"`     Value string     Color string }  type Result struct {     Model1 `gorm:"embedded;embeddedPrefix:m1_"`     Model2 `gorm:"embedded;embeddedPrefix:m2_"` }  res := Result{} db.Raw(`     SELECT         1 AS m1_id,         'one' AS m1_value,         2 AS m2_id,         'two' AS m2_value,         'rose' AS m2_color `).Scan(&res)  fmt.Printf("%+v ", res) // {Model1:{ID:1 Value:one} Model2:{ID:2 Value:two Color:rose}} 
</div
 
 

関連する質問

3  Golangの畑でフィールドを隠す  ( Hide fields in golang gorm ) 
私は私のゴランプロジェクトで草刈りを使っています。 exctly私はREST-APIを持っています、そして私は要求を受け取り、プロセスを作り、オブジェクトを返します。たとえば、次のような構造ユーザーがあります。 <事前> <コード> type User str...

0  gorm 2はgithub.com / guregu/null/zeroを使うことができません  ( Gorm 2 is not able to use github com guregu null zero ) 
文字列やintのような標準データ型を使用し、V2より前のバージョンでうまく機能していました。 zero.string を使用している場合、v2では次のエラーが発生します。 github.com/dhullgu / null/zero.String's Rel...

-2  配列ポインタのスライスの内容を取得/印刷するにはどうすればよいですか。  ( How can i get print the content of a slice of array pointers ) 
次の構造と機能を持っています: <事前> <コード> room3 DBコールから返されたデータを取得/印刷する方法は? ありがとう! ...

1  Golang gormでは、非スピードの予圧を行うことは可能ですか?  ( Is it possible to do an unscoped preload in golang gorm ) 
このようなコールチェインに非符号化()を追加する: <事前> <コード> db.Unscoped().Preload("Orders").Find(&users) find()に影響を与えますが、preload()には影響しません。 preload()...

2  ネストされた構造と関係を持つ要素の塊とスライス  ( Gorm and slice of elements with nested structs and relations ) 
gorm mysqlドライバ。 私は以下の構造を持っています... <事前> <コード> type City struct { ID uint Name string Slug string StateID uint ...

2  耕作を使用してモデルなしでレコードを取得する  ( Retrieving records without model using gorm ) 
Postgre DBと少しGo APIを持っています。 次のFUNCのアイデアは、JSON応答内のすべてのレコードを取得することです。テーブル名を知っているだけで、テーブルのフィールド名がわかりません。 コード: <事前> <コード> func indexP...

0  GO LANGを使用してMySQL DB操作を実行する際に、SQLが内部的に準備されたステートメントスタイル実行に変換される理由  ( Why sql is converted into prepared statement style execution internally in perfo ) 
「データベース/ SQL」またはgormを使用して、MySQL DBで実行している任意のクエリ(選択/更新)は、準備済みステートメントに内部的に変換されます。複数のメッセージ交換が行われています。 準備文[クライアント - &gt; db] DB応答[D...

0  gorm sql構造タグの縮小構文エラー  ( Gorm sql structure tag shrowing syntax error ) 
非常に単純なモデルを持っていて、私は UUID になるように宣言しようとしていますので、この記事 <事前> <コード> type UserUpload struct { gorm.Model UUID string `sql:"type:uuid"...

0  データベースの挿入中に埋め込み構造体フィールドを無視する方法を教えてください。  ( How can i ignore an embedded struct field while inserting database ) 
私は2つのデータベーステーブルを持っています。 Aは3列を持っていて、それらはx、y、zです。 Bは2列を持っており、それらはX、W です。 私の外観はこのようなものです。 <事前> <コード> type Base struct { X int ...

1  GO-GORMとの関連付けに関するAREB句との皆様の関係を照会する方法  ( How to query a many2many relationship with a where clause on the association wit ) 
以下のエンティティを持っています: <コード> type User struct { ID string Name string Groups []Groups `gorm:"many2many:users_groups"` } t...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有