Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pramuat Gorm memberikan ralat lajur yang tidak jelas

Pramuat Gorm memberikan ralat lajur yang tidak jelas

王林
王林ke hadapan
2024-02-10 19:12:07525semak imbas

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

Editor PHP Zimo memperkenalkan anda kepada ralat lajur yang tidak jelas dalam pramuat Gorm. Gorm ialah perpustakaan ORM yang biasa digunakan dalam bahasa Go untuk melaksanakan operasi pangkalan data. Apabila menggunakan Gorm untuk pramuat, anda kadangkala menghadapi ralat lajur yang tidak jelas. Sebab ralat ini mungkin kerana struktur jadual pangkalan data tidak konsisten dengan definisi model Gorm, atau nama lajur jadual perkaitan yang dipramuat adalah tidak betul. Penyelesaian kepada masalah ini adalah untuk menyemak struktur jadual pangkalan data dan definisi model Gorm untuk memastikan ia konsisten, dan semak semula bahawa nama lajur jadual persatuan yang telah dimuatkan adalah betul. Dengan menyelesaikan ralat ini, anda boleh berjaya menggunakan Gorm untuk operasi pramuat dan meningkatkan kecekapan operasi pangkalan data.

Kandungan soalan

Saya mempunyai struktur berikut

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
}

Pertanyaan yang dijana ialah

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;

Saya mempunyai sambungan yang serupa dengan apa yang saya tulis dalam fungsi di atas. Di sini, saya tidak dapat menyambung dengan betul, tetapi dalam kes sebenar, saya tahu bahawa saya perlu menyambung, dan terdapat id medan dalam kedua-dua jadual pramuat dan jadual sambung. Oleh kerana kedua-dua jadual mempunyai nama lajur yang sama iaitu id dalam kes ini mysql akan membuang ralat

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

Saya mengalami masalah ini dalam gorm v1.9.16

Saya tidak menemui sebarang sumber yang menyebut masalah yang sama. Bagaimana kita menyelesaikan masalah ini?

Penyelesaian

Bolehkah anda cuba menggunakan versi terkini (> v1.20.x)?

Isu ini ditutuphttps://github.com/go-gorm/gorm/issue/2653

Isu ini nampaknya telah diselesaikan dalam versi baharuhttps://github.com/go-gorm/gorm/commit/2ae0653af2bc19cd31f687e797b189c85f0ac3f6

Atas ialah kandungan terperinci Pramuat Gorm memberikan ralat lajur yang tidak jelas. 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