为了账号安全,请及时绑定邮箱和手机立即绑定

带有golang的Gorm:预加载无法按预期工作

带有golang的Gorm:预加载无法按预期工作

Go
牧羊人nacy 2022-06-13 10:28:33
我有以下结构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     | 1designation:designation_id | designation_name             1 |  Engineer      employee.designation_id 被标记为外键引用指定表当我调用函数 GetEmployee 时,它返回错误说无法为 model.Employee 预加载字段 Designation我已经提到了许多与 Preload 相关的问题,但没有一个解决方案有效。我认为其他工作案例之间的唯一区别是主要 id 列名。谁能建议正在发生的事情以及我在这里缺少什么?
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

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

}


查看完整回答
反对 回复 2022-06-13
?
慕仙森

TA贡献1827条经验 获得超7个赞

只需将变量名称从 DesignationID 更改为 DesignationDesignationID。它会起作用的。根据文档 ForignKey 必须是 TABLE_NAME + PRIMARY_KEY_NAME 所以这里的表是 DESIGNATION 和主键 DESIGNATIONID


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

    DesignationDesignationID     int64 

    Designation       *Designation

}


type Designation struct {

    DesignationID   int64  `gorm:"primary_key;`

    DesignationName string `gorm:"column:designation_name"`

}


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信