簡體   English   中英

在 go - gorm "mssql: 無效的列名 'id'

[英]In go - gorm "mssql: Invalid column name 'id'

這是我在 go 中的 model

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:列名“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:列名“名稱”無效。 [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, error) { var ( err error db *gorm.DB ) dsn:= "sqlserver://DbUser:mypass@111.111.111.111: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

}

檢查多種方式后的兩種回答方式

首先我必須使用 Find insted of First 另一只手我嘗試通過這兩種方式檢索數據

1:

err := m.db.Debug().Table("CompanyNames").Find(cn, "Id = ?", id).Error

2:

err := m.db.Debug().Table("CompanyNames").Find(cn, map[string]interface{}{
    "Id": Id,
}).Error

作為研究更好的方法是第二種方法

閱讀您自己的答案后,我找到了您的問題。 正如上面的評論所說,如果您顯示表結構,則更容易找到問題。

您的查詢指定的列名稱是Id並且您的結構沒有明確指定此名稱。 根據Grom 約定,您的Id字段將被轉換為id 這個問題可以通過添加標簽來解決。

例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM