php小編子墨為您介紹Gorm預加載中的不明確列錯誤。Gorm是一個在Go語言中常用的ORM庫,用于實現數據庫操作。在使用Gorm進行預加載時,有時會遇到列不明確的錯誤。這個錯誤的原因可能是數據庫表結構與Gorm模型定義不一致,或者是預加載的關聯表列名不正確。解決這個問題的方法是檢查數據庫表結構和Gorm模型定義,確保它們一致,并仔細檢查預加載的關聯表列名是否正確。通過解決這個錯誤,您可以順利使用Gorm進行預加載操作,提高數據庫操作效率。
問題內容
我有以下結構
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 }
登錄后復制
生成的查詢是
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;
登錄后復制
我有一個類似于我在上面函數中編寫的連接。在這里,我無法正確連接,但在實際情況下,我知道需要連接,并且預加載表和連接表中都有 id
字段。
由于兩個表具有相同的列名,即 id
在這種情況下 mysql 會拋出錯誤
錯誤1052:where子句中的列“id”不明確
我在 gorm v1.9.16 中遇到這個問題
我沒有找到任何提到類似問題的資源。
我們如何解決這個問題?
解決方法
您可以嘗試使用最新版本(> v1.20.x)嗎?
該問題已關閉https://github.com/go-gorm/ gorm/問題/2653
這個問題似乎在新版本中得到了解決https://github.com /go-gorm/gorm/commit/2ae0653af2bc19cd31f687e797b189c85f0ac3f6