GORM による構造体の埋め込み
GORM では、構造体を別の構造体内に埋め込むとき、GORM は埋め込まれた構造体に対して別のテーブルを作成することがあります。ただし、埋め込み構造体をメイン テーブル内の追加フィールドとして保存したい場合は、次のアプローチを利用できます:
解決策:
<code class="go">type A struct { Point *GeoPoint } type GeoPoint struct { Lat float64 Lon float64 }</code>
<code class="go">func (gp *GeoPoint) Scan(src interface{}) error { // Convert the `src` value to a byte array. b, ok := src.([]byte) if !ok { return fmt.Errorf("could not convert to byte array") } // Unmarshal the byte array into the `GeoPoint` struct. if err := json.Unmarshal(b, gp); err != nil { return fmt.Errorf("could not unmarshal JSON: %v", err) } return nil } func (gp GeoPoint) Value() (driver.Value, error) { // Marshal the `GeoPoint` struct into a byte array. b, err := json.Marshal(gp) if err != nil { return nil, fmt.Errorf("could not marshal JSON: %v", err) } return string(b), nil }</code>
<code class="go">type A struct { gorm.Model Point *GeoPoint `gorm:"column:point;type:json"` }</code>
Scan メソッドと Value メソッドを実装することで、GORM は埋め込み構造体を次のように変換できます。 JSON 形式から。 gorm:"column" タグと gorm:"type" タグは、メイン テーブル内の埋め込み構造体の列名とデータ型を指定します。
以上がGORM の別の構造体内に構造体を埋め込み、それをメイン テーブルのフィールドとして保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。