Pramuat Gorm memberikan ralat lajur yang tidak jelas

王林
Lepaskan: 2024-02-10 19:12:07
ke hadapan
526 orang telah melayarinya

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
}
Salin selepas log masuk

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;
Salin selepas log masuk

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!

Label berkaitan:
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!