あなたが持っているもので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