データストレージ用に 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 サイトの他の関連記事を参照してください。