ホームページ  >  記事  >  バックエンド開発  >  GORM の埋め込み構造体を親構造体と同じテーブル内に保存するにはどうすればよいですか?

GORM の埋め込み構造体を親構造体と同じテーブル内に保存するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 06:08:02718ブラウズ

How to Store Embedded Structs in GORM within the Same Table as the Parent Struct?

データストレージ用に GORM に構造体を埋め込む

GORM では、ネストされた構造体を格納する場合、埋め込まれた構造体の処理が困難になることがあります。親構造体と同じテーブル。デフォルトでは、GORM は埋め込まれた構造体を別個のエンティティとして想定し、それらの新しいテーブルを作成しようとします。ただし、親構造体のテーブル内の追加フィールドとして埋め込み構造体を含めることもできます。

解決策

1 つの効果的な解決策には、Scan() と Value の実装が含まれます。 () 埋め込み構造体配列を表すカスタム型のメソッド。これらのメソッドを使用すると、GORM は埋め込み構造体を JSON との間でシリアル化および逆シリアル化し、シームレスな保存と取得を可能にします。

説明のために、次の例を考えてみましょう。

<code class="go">type Child struct {
    Lat float64
    Lng float64
}

type ChildArray []Children

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
}</code>

ここでは、ChildArray カスタムtype は子構造体の埋め込み配列を表します。これは、JSON のシリアル化と逆シリアル化を処理するための Scan() メソッドと Value() メソッドを実装します。

ChildArray を Parent 構造体に埋め込んで保存するには、次のようにモデルを定義できます:

<code class="go">type Parent struct {
    *gorm.Model
    Childrens ChildArray `gorm:"column:childrens;type:longtext"`
}</code>

この構成では、GORM は Childrens フィールドをカスタム タイプとして認識し、データベースと対話するときに、埋め込まれた Child 構造体を JSON との間で自動的にシリアル化および逆シリアル化します。

以上がGORM の埋め込み構造体を親構造体と同じテーブル内に保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。