sql - 在 go - gorm "mssql: Invalid column name ' id'

标签 sql go go-gorm

这是我的 go 模型

package models

import (
"time"

"gorm.io/gorm"
 )

type VID uint

type CompanyNames struct {
Id   VID    `json:"id,omitempty"`
Name string `json:"name,omitempty"`
CreateDate time.Time `json:"CreateDate,omitempty"`
ModifyDate time.Time `json:"ModifyDate,omitempty"`

}

这是我的存储库(从数据库检索数据):

func (m *Repo) Read(id models.VID) (*models.CompanyNames, error) {
var (
    cn = &models.CompanyNames{}
)
err := m.db.Debug().Table("CompanyNames").First(cn, &id).Error

if err != nil {
    return nil, err
}
return cn, err

}

在“http”上,我用 echo 编写此代码

func NewHttp(e *echo.Group, lg *Logic) {
g := e.Group("/companyname")
g.GET("", readAll)
g.GET("/:Id", read)

logic = lg
}

当我调用 ReadAll 记录完全检索数据时,这意味着我已正确连接到数据库,但是当我尝试通过“id”获取数据时出现错误:

mssql: Invalid column name 'id'.

这是我的错误吗 另一只手在我的结构中将 id 作为注释,如下所示:>

type CompanyNames struct {
//Id   VID    `json:"id,omitempty"`
Name string `json:"name,omitempty"`
CreateDate time.Time `json:"CreateDate,omitempty"`
ModifyDate time.Time `json:"ModifyDate,omitempty"`
}

收到新错误

mssql: Invalid column name 'name'. [2690.814ms] [rows:0] SELECT * FROM "CompanyNames" WHERE "CompanyNames"."name" = '1' ORDER BY "CompanyNames"."id" OFFSET 0 ROW FETCH NEXT 1 ROWS ONLY

更新:

func Cunnection() (*gorm.DB, 错误) { 变量( 错误错误 db *gorm.DB ) dsn := "sqlserver://DbUser: [email protected] :1433?database=myDb"

db, err = gorm.Open(sqlserver.Open(dsn), &gorm.Config{})

if err != nil {
    return nil, err
}
// err = db.Debug().AutoMigrate(&models.CompanyNameModel{})
// if err != nil {
//  return nil, err
// }
return db, nil

}

最佳答案

阅读您自己的答案后,我发现了您的问题。正如上面的评论所说,如果您显示表结构,就更容易找到问题。

您的查询指定的列名称是 Id,并且您的结构未显式指定此名称。根据Grom convention ,您的 Id 字段将转换为 id。这个问题可以通过添加 tags 来解决.

例如:

package models

import (
    "time"

    "gorm.io/gorm"
)

type VID uint

type CompanyNames struct {
    Id   VID    `json:"id,omitempty" gorm:"column:Id"`
    Name string `json:"name,omitempty" gorm:"column:Name"`
}

关于sql - 在 go - gorm "mssql: Invalid column name ' id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73207946/

相关文章:

c# - sql连接字符串问题

mysql - 在 MySQL 中不使用 'LIMIT' 查找第 4 或第 n 个最高薪水

php - 如何建立重叠的基于时间的定价系统

image - Golang image/gif EncodeAll有很多黑点

GORM : cannot INSERT into generated column

MySQL在插入tbl1时创建触发器也插入到tbl2

go - 通过引用检查结构体的字段(通过静态分析)

由于字符无效,Json 解码失败

go - 如何使用自定义时区自动填充类型为 `time.Time` 的结构字段?

sql - 如何在gorm中创建双向多对多关系