sql >> データベース >  >> RDS >> PostgreSQL

gormの構造体にネストされたオブジェクトを取得する

    あなたが持っているもので2つのことをしたいと思うようです:(1)正しい関係バインディングを持つようにモデルを更新し、(2).Preload()を使用します 読み取り時にデータを関連付けるように取得しようとしている場合は、メソッド。

    モデルの変更

    Gormは、構造体の属性の名前と参照されている構造体の名前に基づいて、関係を自動的に推測します。問題は、Google タイプGoogleAccountの属性 gormがtype Google structを探しているため、関連付けられていません 。

    GoogleAccountにも外部キーがありません 。 ORMはどのGoogleAccountをどのように知るのでしょうか どのClientに関連付けるか ? ClientIdを追加する必要があります GoogleAccountに 構造体の定義。

    また、uintと入力するために使用している主キーを変更します それがgormのデフォルトであるため(使用しない正当な理由がない限り)

    もし私があなたなら、構造体の定義を次のように変更します:

    type Client struct {
         IdClient       uint            `gorm:"primary_key"`
         Name           string
         PhotoUrl       string
         ApprovalNumber uint16
         Phone          string
         Password       string
         HoursOfNotice  int8
         GoogleAccount  GoogleAccount    // Change this to `GoogleAccount`, the same name of your struct
    }
    
    type GoogleAccount struct {
         Id             uint
         ClientId       uint             // Foreign key
         Token          string
    }
    

    詳細については、次の関連ドキュメントを参照してください: http://gorm。 io / associations.html#has-one

    関連付けのプリロード

    実際に適切に関連付けられたので、.Preload()を実行できます。 必要なネストされたオブジェクトを取得します:

    db.Preload("GoogleAccount").First(&user)
    

    .Preload()の使用 user.GoogleAccountにデータを入力します 正しく関連付けられたGoogleAccountの属性 ClientIdに基づく 。

    これについて詳しくは、プリロードのドキュメントをご覧ください: http:// gorm .io / crud.html#preloading-eager-loading



    1. 範囲からテーブルに値を自動挿入

    2. Visual C#2008でのtnsnames.oraの解析

    3. 方法:(検索スペース)を(他のテーブルの列と結合する)と照合する

    4. SQLステートメントのみを使用するワイルドカードを使用したmySQLドロップテーブル?