Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mendapatkan nama lajur dan nilai dari objek Gorm?

Bagaimana untuk mendapatkan nama lajur dan nilai dari objek Gorm?

WBOY
WBOYke hadapan
2024-02-09 15:30:091230semak imbas

如何从 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)
    }
}
trans := make([]orm.Trans, 0)

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

    testfunc(trans)

Apabila dijalankan, jenis dicetak dan kemudian panik:

[]orm.Trans
panic: reflect: call of reflect.Value.NumField on slice Value

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)

}

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}

3-Dapatkan output:-

Names [Name Id]
values [Zargham 2]

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam