猿问

带有golang的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

}


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(employee).Preload("Designation").Find(employee).Error

    return employee, err

 }

在表格中,我有以下记录:


employee :

employee_id | employee_code | first_name | last_name | designation_id

          1 |  EMP1         |  Raj       |  Mane     | 1


designation:

designation_id | designation_name

             1 |  Engineer      

employee.designation_id 被标记为外键引用指定表


当我调用函数 GetEmployee 时,它返回错误说无法为 model.Employee 预加载字段 Designation


我已经提到了许多与 Preload 相关的问题,但没有一个解决方案有效。我认为其他工作案例之间的唯一区别是主要 id 列名。谁能建议正在发生的事情以及我在这里缺少什么?


牧羊人nacy
浏览 185回答 2
2回答

慕侠2389804

在 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"`}

慕仙森

只需将变量名称从 DesignationID 更改为 DesignationDesignationID。它会起作用的。根据文档 ForignKey 必须是 TABLE_NAME + PRIMARY_KEY_NAME 所以这里的表是 DESIGNATION 和主键 DESIGNATIONIDtype 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"`    DesignationDesignationID     int64     Designation       *Designation}type Designation struct {    DesignationID   int64  `gorm:"primary_key;`    DesignationName string `gorm:"column:designation_name"`}
随时随地看视频慕课网APP

相关分类

Go
我要回答