Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyimpan Struktur Terbenam dalam GORM sebagai Entiti Tunggal?

Bagaimana untuk Menyimpan Struktur Terbenam dalam GORM sebagai Entiti Tunggal?

Susan Sarandon
Lepaskan: 2024-11-02 22:04:30
asal
905 orang telah melayarinya

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

Menggabungkan Struktur Terbenam dalam GORM

Menyimpan struktur terbenam dengan GORM menimbulkan cabaran apabila berurusan dengan jenis seperti:

<code class="go">type A struct {
    point GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}</code>
Salin selepas log masuk

Secara lalai, GORM cuba mencipta jadual berasingan untuk GeoPoint struct terbenam. Walau bagaimanapun, untuk menambahkannya sebagai medan dalam struct induk A, pertimbangkan penyelesaian berikut yang diilhamkan oleh cerapan 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>
Salin selepas log masuk

Pendekatan ini membolehkan penggabungjalinan dan pembongkaran struct terbenam dalam struktur induk yang lancar , memastikan ia disimpan dan diambil daripada pangkalan data sebagai satu entiti.

Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Struktur Terbenam dalam GORM sebagai Entiti Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan