Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyimpan Struktur Terbenam dengan GORM?

Bagaimana untuk Menyimpan Struktur Terbenam dengan GORM?

DDD
DDDasal
2024-11-04 03:09:01841semak imbas

How to Store Embedded Structs with GORM?

Menyimpan Struktur Terbenam dengan GORM

Apabila bekerja dengan GORM dan struktur terbenam, adalah penting untuk memahami cara GORM mengendalikan struktur ini. Sebagai contoh, pertimbangkan struct berikut:

type A struct {
    point GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}

Secara lalai, GORM cuba mencipta jadual berasingan untuk struct terbenam (GeoPoint), yang mungkin tidak diingini. Untuk membenamkan struct sebagai medan dalam jadual yang sama, kita perlu mengarahkan GORM secara manual menggunakan tag lajur.

Penyelesaian:

Untuk menyimpan struct terbenam sebagai yang lain medan, tambahkan teg gorm:"column:..." pada medan struct terbenam. Contohnya:

type A struct {
    GORMModel
    Point GeoPoint `gorm:"embedded;column:point"`
}

Dengan menetapkan pilihan terbenam, GORM mengenali struct terbenam dan mencipta medan baharu bernama titik dalam jadual A. Pilihan lajur membolehkan kami menentukan nama tersuai untuk medan.

Penyelesaian Alternatif untuk JSON Marshalling/Unmarshalling:

Penyelesaian yang diubah suai ini membolehkan marshalling/unmarshalling automatik bagi sesuatu struct terbenam sebagai lajur JSON.

type Child struct {
    Lat float64
    Lng float64
}

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
}

type Parent struct {
    GORMModel
    Childrens ChildArray `gorm:"column:childrens;type:longtext"`
}

Pendekatan ini menyimpan tatasusunan Childrens sebagai rentetan berkod JSON dalam lajur kanak-kanak. Apabila mendapatkan semula data, GORM secara automatik menyahmarshal rentetan JSON kembali ke dalam tatasusunan Childrens.

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

Kenyataan:
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