GORM で埋め込み構造体を保存すると、次のような型を扱うときに問題が発生します。
<code class="go">type A struct { point GeoPoint } type GeoPoint struct { Lat float64 Lon float64 }</code>
デフォルトでは、 GORM は、埋め込まれた構造体 GeoPoint 用に別のテーブルを作成しようとします。ただし、これを親構造体 A 内のフィールドとして追加するには、Chris の洞察に基づいた次のソリューションを検討してください。
<code class="go">import ( "encoding/json" "gorm.io/gorm" ) // Define custom Scan and Value methods for ChildArray to enable automatic marshalling and unmarshalling. type ChildArray []Child func (sla *ChildArray) Scan(src interface{}) error { return json.Unmarshal(src.([]byte), &sla) } func (sla ChildArray) Value() (driver.Value, error) { val, err := json.Marshal(sla) return string(val), err } // Define the parent struct with the embedded ChildArray. type Parent struct { *gorm.Model Childrens ChildArray `gorm:"column:childrens;type:longtext"` }</code>
このアプローチにより、親構造体内に埋め込まれた構造体のシームレスなマーシャリングとアンマーシャリングが可能になります。単一のエンティティとしてデータベースに保存され、データベースから取得されるようにします。
以上が埋め込み構造体を単一のエンティティとして GORM に保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。