Heim  >  Artikel  >  Backend-Entwicklung  >  Das Vorladen von Gorm führt zu einem mehrdeutigen Spaltenfehler

Das Vorladen von Gorm führt zu einem mehrdeutigen Spaltenfehler

王林
王林nach vorne
2024-02-10 19:12:07526Durchsuche

Gorm 预加载给出了不明确的列错误

PHP-Editor Zimo stellt Ihnen den mehrdeutigen Spaltenfehler beim Gorm-Vorladen vor. Gorm ist eine ORM-Bibliothek, die häufig in der Go-Sprache zur Implementierung von Datenbankoperationen verwendet wird. Wenn Sie Gorm zum Vorabladen verwenden, treten manchmal mehrdeutige Spaltenfehler auf. Der Grund für diesen Fehler kann sein, dass die Datenbanktabellenstruktur nicht mit der Gorm-Modelldefinition übereinstimmt oder der vorinstallierte Spaltenname der Zuordnungstabelle falsch ist. Die Lösung für dieses Problem besteht darin, die Datenbanktabellenstruktur und die Gorm-Modelldefinition zu überprüfen, um sicherzustellen, dass sie konsistent sind, und noch einmal zu überprüfen, ob die vorinstallierten Spaltennamen der Zuordnungstabelle korrekt sind. Durch die Behebung dieses Fehlers können Sie Gorm erfolgreich für Vorladevorgänge verwenden und die Effizienz des Datenbankbetriebs verbessern.

Frageninhalt

Ich habe folgenden Aufbau

type employee struct {
    employeeid        int64  `gorm:"primary_key;column:employee_id"`
    employeecode      string `gorm:"column:employee_code"`
    firstname         string `gorm:"column:first_name"`
    lastname          string `gorm:"column:last_name"`
    designationid     int64  `gorm:"column:designation_id;"`
    designation       *designation `gorm:"foreignkey:designationid"`
}

type designation struct {
    designationid   int64  `gorm:"primary_key;column:designation_id"`
    designationname string `gorm:"column:designation_name"`
}

func getemployee(id int64) (*employee, error) {
    db := connection.getconn() //get connection
    defer db.close()

    employee := &employee{}
    err := db.model(employees).preload("designation", func(db *gorm.db) *gorm.db {
        return db.join("inner join employees on employees.designation_id = designations.id").order("employees.first_name desc")
    }).find(employee).error
    return employee, err
}

Die generierte Abfrage ist

SELECT * FROM employees;
SELECT * FROM designations INNER JOIN employees ON employees.designation_id = designations.id WHERE id IN (1,2) order by employees.first_name DESC;

Ich habe eine ähnliche Verbindung wie die, die ich oben in der Funktion geschrieben habe. Hier kann ich keine korrekte Verbindung herstellen, aber im echten Fall weiß ich, dass ich eine Verbindung herstellen muss, und es gibt id Felder sowohl in der Preload-Tabelle als auch in der Join-Tabelle. Da beide Tabellen dieselben Spaltennamen haben, d. h. id, wird MySQL in diesem Fall einen Fehler auslösen

错误1052:where子句中的列“id”不明确

Ich habe dieses Problem in gorm v1.9.16

Ich habe keine Ressourcen gefunden, die ein ähnliches Problem erwähnten. Wie lösen wir dieses Problem?

Problemumgehung

Können Sie versuchen, die neueste Version (> v1.20.x) zu verwenden?

Dieses Problem ist geschlossenhttps://github.com/go-gorm/gorm/issue/2653

Dieses Problem scheint in der neuen Version behoben zu seinhttps://github.com/go-gorm/gorm/commit/2ae0653af2bc19cd31f687e797b189c85f0ac3f6

Das obige ist der detaillierte Inhalt vonDas Vorladen von Gorm führt zu einem mehrdeutigen Spaltenfehler. 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