ホームページ > バックエンド開発 > Golang > 埋め込み構造体を単一のエンティティとして GORM に保存するにはどうすればよいですか?

埋め込み構造体を単一のエンティティとして GORM に保存するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-02 22:04:30
オリジナル
905 人が閲覧しました

How to Store Embedded Structs in GORM as a Single Entity?

GORM への埋め込み構造体の組み込み

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート