我有以下 struct

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抛出错误

Error 1052: Column 'id' in where clause is ambiguous

我将在gorm v1.9.16年内面对这个问题

我没有找到任何提到类似问题的资源. 我们如何解决这个问题?

推荐答案

您可以try 使用最新版本(>;v1.20.x)吗?

该问题已关闭https://github.com/go-gorm/gorm/issues/2653

这个问题似乎在新的版本https://github.com/go-gorm/gorm/commit/2ae0653af2bc19cd31f687e797b189c85f0ac3f6中得到了解决

Go相关问答推荐

Go 1.22 http mux:在同一路径上提供一个手柄和一个FS

map 中的多个函数类型,Golang

exec的可执行决议.命令+路径

如何模拟go的Elastic search SDK?

切片的下限和上限

htmx 表单 + gin 无法正确读取请求正文

Golang 创建一个带有处理程序的模拟数据库并使用接口调用数据库

如何使用名称具有包名称的嵌套 struct 启动 go struct

如果 transaction.Commit 对带有 postgres 连接的 SQL 失败,您是否需要调用 transaction.RollBack

如何在自定义验证函数中获取 struct 名称

为什么当我忽略 template.New() 程序可以成功运行?

Golang invopop jsonschema 使用 if/then/else

在 Go 中发送 ack 和 term 后消息仍在 nats 限制队列中

自定义指标未显示在 prometheus web ui 中,grafana 中也是如此

如何从 Go 1.18 中的单个方法返回两种不同的具体类型?

如何使用golang操作很长的字符串以避免内存不足

HCL 解码:具有多个标签的块

将 Simple Go Web 应用程序部署到 Elastic Beanstalk

如何在 Go 中使用 Pact 返回错误请求(400、500)?

如何在 Gorm 中获得特定日期的最大值?