Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erhalte ich Spaltennamen und -werte vom Gorm-Objekt?

Wie erhalte ich Spaltennamen und -werte vom Gorm-Objekt?

WBOY
WBOYnach vorne
2024-02-09 15:30:091231Durchsuche

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

php Editor Strawberry In der Programmierentwicklung verwenden wir häufig Gorm-Objekte für Datenbankoperationen. Manchmal müssen wir den Spaltennamen und den entsprechenden Wert vom Gorm-Objekt abrufen. Wie kann diese Anforderung erfüllt werden? In Gorm können wir die Eigenschaften und Werte des Objekts durch Reflexion ermitteln und sie mit Gorms Beschriftungen kombinieren, um die Spaltennamen zu erhalten. Als Nächstes werde ich im Detail vorstellen, wie man Spaltennamen und -werte aus Gorm-Objekten erhält. Lass uns einen Blick darauf werfen!

Frageninhalt

Ich möchte eine Funktion schreiben, die jedes aus der Datenbank (über Gorm) geladene Objekt übernehmen und alle Spaltennamen und -werte ausdrucken kann. Der entscheidende Teil ist natürlich die Möglichkeit, jedes meiner Gorm-Modelle an diese Funktion zu übergeben. Ich zeige diese unten nicht, da sie alle einfach sind.

Was ich bisher habe, ist eine Funktion mit einer Schnittstelle und einigem Testcode, der sie aufruft:

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)

Beim Ausführen wird der Typ gedruckt und es kommt dann zur Panik:

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

Ich bin ein Neuling, daher sind Ihre Ideen willkommen. Meine möglichen Optionen scheinen folgende zu sein:

  • Verwenden Sie Reflexion (falls beim Schneiden anwendbar)
  • Irgendwie ein Feld in einem Modell finden?
  • Noch weitere Ideen?

Vielen Dank.

Lösung

Probieren Sie diese Methode aus:

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- Sie übergeben ein Stück Struktur. (Wenn Sie Slicing verwenden, vermeiden Sie den Aufruf der obigen Funktion in einer Schleife.)

2- Ich übergebe diese Struktur an die obige Funktion

x := struct {
                Name string
                Id int
        }{"Zargham", 2}

3-Erhalten Sie die Ausgabe:-

Names [Name Id]
values [Zargham 2]

Das obige ist der detaillierte Inhalt vonWie erhalte ich Spaltennamen und -werte vom Gorm-Objekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen