Bagaimana untuk mendapatkan nama lajur dan nilai dari objek Gorm?

WBOY
Lepaskan: 2024-02-09 15:30:09
ke hadapan
1209 orang telah melayarinya

如何从 Gorm 对象获取列名称和值?

php Editor Strawberi Dalam pembangunan pengaturcaraan, kami sering menggunakan objek Gorm untuk operasi pangkalan data. Kadangkala, kita perlu mendapatkan nama lajur dan nilai yang sepadan daripada objek Gorm. Jadi, bagaimana untuk mencapai keperluan ini? Di Gorm, kita boleh mendapatkan sifat dan nilai objek melalui refleksi, dan menggabungkannya dengan label Gorm untuk mendapatkan nama lajur. Seterusnya, saya akan memperkenalkan secara terperinci cara mendapatkan nama lajur dan nilai dari objek Gorm. Mari lihat!

Kandungan soalan

Saya ingin menulis fungsi yang boleh mengambil sebarang objek yang dimuatkan daripada pangkalan data (melalui gorm) dan mencetak semua nama dan nilai lajur. Jelas sekali bahagian penting ialah keupayaan untuk menghantar mana-mana model Gorm saya ke dalam fungsi ini. Saya tidak menunjukkan ini di bawah kerana semuanya mudah.

Apa yang saya ada setakat ini ialah fungsi dengan antara muka, dan beberapa kod ujian yang memanggilnya:

func testfunc(s interface{}) {

    // type
    v := reflect.TypeOf(s)

    fmt.Println(v)

    // fields?
    for i := 0; i < v.NumField(); i++ {
        fmt.Println(i)
    }
}
Salin selepas log masuk
trans := make([]orm.Trans, 0)

    db.Where("state = ?", state.FINISHED).Limit(1).Find(&trans)

    testfunc(trans)
Salin selepas log masuk

Apabila dijalankan, jenis dicetak dan kemudian panik:

[]orm.Trans
panic: reflect: call of reflect.Value.NumField on slice Value
Salin selepas log masuk

Saya orang baru, jadi idea anda dialu-alukan. Nampaknya pilihan saya yang mungkin ialah:

  • Gunakan refleksi (jika berkenaan untuk menghiris)
  • Cari bidang dalam model entah bagaimana?
  • Ada idea lain?

Terima kasih.

Penyelesaian

Cuba kaedah ini:

func testfunc(x interface{}){
        v := reflect.ValueOf(x)
        s := reflect.TypeOf(x)
        names:=make([]interface{},v.NumField())
        values := make([]interface{}, v.NumField())

        for i := 0; i < v.NumField(); i++ {
                values[i] = v.Field(i).Interface()
                names[i] = s.Field(i).Name
        }
        fmt.Println("Names",names)
        fmt.Println("values",values)

}
Salin selepas log masuk

1- Anda melepasi sekeping struct. (Jika menggunakan kepingan, elakkan memanggil fungsi di atas dalam gelung.)

2- Saya menghantar struktur ini kepada fungsi di atas

x := struct {
                Name string
                Id int
        }{"Zargham", 2}
Salin selepas log masuk

3-Dapatkan output:-

Names [Name Id]
values [Zargham 2]
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan nama lajur dan nilai dari objek Gorm?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!